!extend:checked:vvvvv:1000:512
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/
C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
探検
C言語なら俺に聞け 151
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ cf8f-fy95)
2019/04/02(火) 11:23:37.62ID:SQXqRaAc0528デフォルトの名無しさん (アウアウウー Sa1b-wdoq)
2019/05/15(水) 09:32:21.44ID:k0yjAgrYa やっぱ int32_t みたいな環境に関係なく同じビット数になるやつにしといた方が良いんじゃないかな。
529デフォルトの名無しさん (ワッチョイ ff69-PnGR)
2019/05/15(水) 09:45:02.94ID:25auY+1H0 515の
>ただ今回考えてるのは、コンパイルせずに共有ライブラリを差し替えるって状況を想定してる
>そのときにセグメンテーションフォールトがでないようにしたい
構造体のパラメータを追加し共有ライブラリを差し替えつつ
呼び出し側のコンパイルは行わないって無理ないか?
旧ソースで追加されたパラメータ部分は不定値であって
その不定値をうけて共有ライブラリ内部が正しく動作できるとは思えないが…
>ただ今回考えてるのは、コンパイルせずに共有ライブラリを差し替えるって状況を想定してる
>そのときにセグメンテーションフォールトがでないようにしたい
構造体のパラメータを追加し共有ライブラリを差し替えつつ
呼び出し側のコンパイルは行わないって無理ないか?
旧ソースで追加されたパラメータ部分は不定値であって
その不定値をうけて共有ライブラリ内部が正しく動作できるとは思えないが…
530デフォルトの名無しさん (ワッチョイ 9f2c-NS0m)
2019/05/15(水) 11:40:27.07ID:AfKgri370 構造体には、サイズの変わらない、ポインタだけを置いておいて、
実際の領域は、ライブラリ内で確保して使って、解放すれば?
実際の領域は、ライブラリ内で確保して使って、解放すれば?
531デフォルトの名無しさん (アウアウウー Sa1b-NBbm)
2019/05/15(水) 12:19:01.09ID:e9I3VVqQa さすがに実体を共有するという目的がないとこういう発想にはならんでしょ。
共有メモリとか、ファイルとか、通信とか。
共有メモリとか、ファイルとか、通信とか。
532デフォルトの名無しさん (オッペケ Sr8b-lJiK)
2019/05/15(水) 12:31:29.02ID:dMKqDPXvr >>529
呼び出す側がバージョン情報をもっておいて、処理側で振り分けてアクセスしないようにすれば問題ないね
#define version 2
void func (const struct* foo) {
func_impl(foo, version);
}
void func_impl(const struct* foo, int version) {
if (version > 1) {
foo.b;
}
}
呼び出す側がバージョン情報をもっておいて、処理側で振り分けてアクセスしないようにすれば問題ないね
#define version 2
void func (const struct* foo) {
func_impl(foo, version);
}
void func_impl(const struct* foo, int version) {
if (version > 1) {
foo.b;
}
}
533デフォルトの名無しさん (ワッチョイ ff69-PnGR)
2019/05/15(水) 12:43:05.74ID:25auY+1H0534デフォルトの名無しさん (アウアウウー Sa1b-wdoq)
2019/05/15(水) 12:53:24.07ID:k0yjAgrYa 構造体の中身を公開しないでポインタだけ使わせて読み書きする関数を別途用意するって方法もあると思う。オブジェクト指向の言語でのプロパティのようなものね。
内容のファイルへの読み書きやネットワークでのやり取りはそれようにデータをpack、unpackする処理を作ってそこにバージョン番号も埋め込む。
内容のファイルへの読み書きやネットワークでのやり取りはそれようにデータをpack、unpackする処理を作ってそこにバージョン番号も埋め込む。
535デフォルトの名無しさん (ワッチョイ 9ff9-vVMj)
2019/05/15(水) 12:59:51.65ID:Wbf0zcGJ0 exeがnew(malloc)するけど中をいじるのは全てdllの関数ってのはままある
dllだけ差し替えで済ましたい、サイズが変わらなければexeはビルドし直さなくていいのに…
ってことだろう
>512の
>intや他の型が固定サイズの保証はないから、処理系をかんがえると使えない
>パディングでサイズも変わっちゃうしね
は全く関係ない話だったということだ
素直に「よくある手段」でやればいい
>514,517のunionもいいと思うけど
foo.aでアクセスできないよね?foo.body.aとかしないと
dllだけ差し替えで済ましたい、サイズが変わらなければexeはビルドし直さなくていいのに…
ってことだろう
>512の
>intや他の型が固定サイズの保証はないから、処理系をかんがえると使えない
>パディングでサイズも変わっちゃうしね
は全く関係ない話だったということだ
素直に「よくある手段」でやればいい
>514,517のunionもいいと思うけど
foo.aでアクセスできないよね?foo.body.aとかしないと
536デフォルトの名無しさん (ワッチョイ ff69-PnGR)
2019/05/15(水) 13:12:20.84ID:25auY+1H0 >>517 の foo.a でいきなりアクセスできる union が記述できるのは C11 からみたい
無名構造体/無名共用体
無名構造体/無名共用体
537デフォルトの名無しさん (オッペケ Sr8b-lJiK)
2019/05/15(水) 14:41:00.06ID:dMKqDPXvr >>535
intが4バイトなんて保証はないから、char[] bufの大きさを決められないって話でしょ?
intメンバを追加したとして、bufのサイズはどれだけ減らせばいいのかわからないのが問題
4の環境が多いだろけど、2の環境だと2を減らさなきゃいけないわけで
dll差し替えで再ビルドしない場合、構造体サイズが変わると特に配列渡しの場合はセグメンテーションフォールトになる可能性が高くて危険
セーブデータみたいに構造体をそのままファイルに落とすとしても、サイズはずっと不変なのが扱いやすいね
intが4バイトなんて保証はないから、char[] bufの大きさを決められないって話でしょ?
intメンバを追加したとして、bufのサイズはどれだけ減らせばいいのかわからないのが問題
4の環境が多いだろけど、2の環境だと2を減らさなきゃいけないわけで
dll差し替えで再ビルドしない場合、構造体サイズが変わると特に配列渡しの場合はセグメンテーションフォールトになる可能性が高くて危険
セーブデータみたいに構造体をそのままファイルに落とすとしても、サイズはずっと不変なのが扱いやすいね
538デフォルトの名無しさん (アウアウウー Sa1b-NBbm)
2019/05/15(水) 14:56:07.34ID:e9I3VVqQa 数字付かないintのでかい方に合わせるなら、それこそunion使って明示的にオフセット決めるとか。
本当にそんなことしたいのか?という話は置いといて。
もちろんint32_tとかint_least32_t使う方がいいし、本当に位置合わせするならバイト位置指定して読み書きするし、そもそもサイズ固定せずにシリアライズ用のライブラリ使うのが正しいよ。
本当にそんなことしたいのか?という話は置いといて。
もちろんint32_tとかint_least32_t使う方がいいし、本当に位置合わせするならバイト位置指定して読み書きするし、そもそもサイズ固定せずにシリアライズ用のライブラリ使うのが正しいよ。
539デフォルトの名無しさん (ドコグロ MMdf-vyow)
2019/05/15(水) 19:35:47.81ID:0TljqresM540デフォルトの名無しさん (ワッチョイ 9ff9-vVMj)
2019/05/15(水) 20:46:54.27ID:Wbf0zcGJ0541デフォルトの名無しさん (ワッチョイ d7ab-xJZP)
2019/05/15(水) 21:55:29.06ID:ZaVTFrP70 win32apiはバージョンによって構造体の変数が追加になるから構造体のサイズを構造体の先頭にセットする
542デフォルトの名無しさん (ワッチョイ baa5-bDB9)
2019/05/16(木) 08:13:26.18ID:eEplP63Q0 windows.hのsmallで一時間潰した
543デフォルトの名無しさん (ワッチョイ 29ad-BnNU)
2019/05/16(木) 19:38:59.34ID:GXqxfUU20 文字配列列sを逆順に文字配列tに格納して出力したいのですが、
以下のコードでは実行してもt=[]と出力されてしまいます
#include <stdio.h>
#define MAXLINE 1000
main()
{
char s[MAXLINE],t[MAXLINE];
int c,i,I;
for(i=0; i<MAXLINE-1 && (c=getchar())!=EOF && c!='¥n'; ++i)
{
s[i]=c;
}
if(c=='¥n'){
s[i]=c;
++i;
}
s[i]='\0';
I=i;
for(i=i; 0<=i; i=i-1)
{
t[I-i]=s[i];
}
printf("t=[%s]",t);
}
どこがおかしいのでしょうか…
以下のコードでは実行してもt=[]と出力されてしまいます
#include <stdio.h>
#define MAXLINE 1000
main()
{
char s[MAXLINE],t[MAXLINE];
int c,i,I;
for(i=0; i<MAXLINE-1 && (c=getchar())!=EOF && c!='¥n'; ++i)
{
s[i]=c;
}
if(c=='¥n'){
s[i]=c;
++i;
}
s[i]='\0';
I=i;
for(i=i; 0<=i; i=i-1)
{
t[I-i]=s[i];
}
printf("t=[%s]",t);
}
どこがおかしいのでしょうか…
544デフォルトの名無しさん (ワッチョイ 3f01-pg4x)
2019/05/16(木) 19:48:10.73ID:q0J7kB7g0 後のループの一発目は
s[i]='\0';
I=i;
/* ここのforを削って */
t[I-i]=s[i];
こういうことになるから
t[0] = s[i] ってことになって t[0] = '\0'; をやってることになる
上記のは
1 2 3 4 \0 → \0 4 3 2 1 のコード
実装すべきなのは
1 2 3 4 \0 → 4 3 2 1 \0 となるコード
s[i]='\0';
I=i;
/* ここのforを削って */
t[I-i]=s[i];
こういうことになるから
t[0] = s[i] ってことになって t[0] = '\0'; をやってることになる
上記のは
1 2 3 4 \0 → \0 4 3 2 1 のコード
実装すべきなのは
1 2 3 4 \0 → 4 3 2 1 \0 となるコード
545デフォルトの名無しさん (アウアウウー Sa83-RNyv)
2019/05/16(木) 20:27:22.18ID:m1+/MMjMa 惜しいねえ。綺麗に逆に入ってはいるんだよな。
546デフォルトの名無しさん (ワッチョイ 29ad-BnNU)
2019/05/16(木) 20:38:11.53ID:GXqxfUU20 おっしゃる通りでした…今度は上手くいきました
ありがとうございます
ありがとうございます
547デフォルトの名無しさん (ワッチョイ 29ad-BnNU)
2019/05/16(木) 20:38:46.73ID:GXqxfUU20 おっしゃる通りでした…今度は上手くいきました
ありがとうございます
ありがとうございます
548デフォルトの名無しさん (ワッチョイ 3f01-pg4x)
2019/05/16(木) 21:09:34.65ID:q0J7kB7g0 自己解決できたようでなにより
整数の配列を逆に整列させるなら正解だったんだけどねー
「文字列」操作の落とし穴ですな
整数の配列を逆に整列させるなら正解だったんだけどねー
「文字列」操作の落とし穴ですな
549デフォルトの名無しさん (ワッチョイ 2c5f-N32O)
2019/05/18(土) 22:03:40.11ID:e0Mh58zT0 今C言語教室でSQLとGUIやってる初心者なんだがCでDB弄る仕事ってあるのか
JavaとかC#に取られそうだけど
JavaとかC#に取られそうだけど
550デフォルトの名無しさん (アウアウエー Sa6a-ZkGz)
2019/05/18(土) 22:06:44.17ID:8rj7/ih6a sqliteは使うよ
552デフォルトの名無しさん (ワッチョイ 2c5f-N32O)
2019/05/18(土) 22:19:48.67ID:e0Mh58zT0 SQL使うのか慣れてないからあんまやりたくないんだよなあ
頑張るか
頑張るか
553デフォルトの名無しさん (ワッチョイ aa01-A+mh)
2019/05/18(土) 22:37:47.44ID:D3aJPSyb0554デフォルトの名無しさん (ワッチョイ d863-N32O)
2019/05/18(土) 22:53:12.41ID:RWbfx4gX0 むかーし、Pro*C って使った事がある
Cのソース内にSQLを埋め込み
プリコンパイルする感じ
今は流行らないかもしれない
Cのソース内にSQLを埋め込み
プリコンパイルする感じ
今は流行らないかもしれない
555デフォルトの名無しさん (アウアウエー Sa6a-ZkGz)
2019/05/18(土) 22:58:45.45ID:8rj7/ih6a SQL使いこなしてる人ってすごいけど、正直ああはなりたくないという感じだよな。
556デフォルトの名無しさん (ワッチョイ d863-N32O)
2019/05/18(土) 23:01:53.11ID:RWbfx4gX0 賢いファイルシステムとして利用すると超便利だぞ
557デフォルトの名無しさん (ワッチョイ d863-N32O)
2019/05/18(土) 23:02:38.45ID:RWbfx4gX0 同じ事をCのロジックで組むとなると、アタマおかしくなるかも
558デフォルトの名無しさん (ワッチョイ 73c3-AU7T)
2019/05/18(土) 23:08:58.89ID:Y/SMFmS40 普通にアプリケーションの規模が大きくなるとsql使いたくなるだろ
そういう場合はsqlite使う
そういう場合はsqlite使う
559デフォルトの名無しさん (ワッチョイ d863-N32O)
2019/05/18(土) 23:10:30.33ID:RWbfx4gX0 5ちゃんねる専用ブラウザもsqlite使っているそうですね?
プログラムコードはCではないですが
プログラムコードはCではないですが
560デフォルトの名無しさん (ワッチョイ 8654-2aw6)
2019/05/19(日) 10:01:29.20ID:EV8D9m9A0 IoTのデバイス開発やってるけど、C言語でDBのクライアントライブラリ使ってるよ
561デフォルトの名無しさん (ワッチョイ 9ff6-EL+e)
2019/05/19(日) 16:30:57.06ID:b6d7Y/CF0 リーナスさんはC++嫌いつーてるしな
トレードマークのfuck口調で
トレードマークのfuck口調で
562デフォルトの名無しさん (アウアウウー Sa83-RNyv)
2019/05/19(日) 17:49:51.40ID:V/GPYpFPa この頃は間に何かライブラリ挟んでDB変わってもSQL文がほぼ同じままで行けるようなのが流行りなのでは?
563デフォルトの名無しさん (ワッチョイ 4edc-EL+e)
2019/05/19(日) 19:08:51.80ID:SqCxdnVY0 大学の情報科の人たちってどのレベルでC言語使えるんですかね?
Cに限ったことではないですが大学4年でどの程度の練度が身につくのか
Cに限ったことではないですが大学4年でどの程度の練度が身につくのか
564デフォルトの名無しさん (ワッチョイ 4652-EL+e)
2019/05/19(日) 19:17:39.10ID:Ic55MIMX0 人によるだろ
そもそも好きなやつは大学入る前からやってるからな
そもそも好きなやつは大学入る前からやってるからな
565デフォルトの名無しさん (アウアウエー Sa6a-ZkGz)
2019/05/19(日) 19:22:28.74ID:qBoKnLB7a >>563
別に使えなくてもいいよ
別に使えなくてもいいよ
566デフォルトの名無しさん (ワッチョイ 9ff6-EL+e)
2019/05/19(日) 21:05:03.54ID:b6d7Y/CF0567デフォルトの名無しさん (アウアウカー Sa0a-ZkGz)
2019/05/19(日) 21:14:52.17ID:Y3pJ4vrOa >>566
お前が入ったの専門学校だろ?
お前が入ったの専門学校だろ?
568デフォルトの名無しさん (ワッチョイ 9ff6-EL+e)
2019/05/19(日) 21:19:32.43ID:b6d7Y/CF0 >>567
化学科だけど
化学科だけど
569デフォルトの名無しさん (ワッチョイ d863-N32O)
2019/05/19(日) 21:24:37.32ID:RJz4Ejb00 学校だとアルゴリズムやシステム設計手法は学べるだろうが
練度が上がるのはやはり仕事を始めてからだと思う
練度が上がるのはやはり仕事を始めてからだと思う
570デフォルトの名無しさん (オッペケ Sr88-2aw6)
2019/05/20(月) 12:44:26.31ID:PSRVLRmYr コンピュータサイカヨウの基本は一通りやるんじゃない?
情報処理試験の基本レベルくらいのもの
初心者は実務にはそのままは使えないけど、中級以上のエンジニアならこのあたりの知識があると差がついてくるね
情報処理試験の基本レベルくらいのもの
初心者は実務にはそのままは使えないけど、中級以上のエンジニアならこのあたりの知識があると差がついてくるね
571デフォルトの名無しさん (ワッチョイ 328c-TfzP)
2019/05/20(月) 14:12:04.87ID:0d3wAWyu0 業務のほとんどは手作業の自動化だから差は出ない。そしてみんなリストラされる。
572デフォルトの名無しさん (ワッチョイ 462d-EL+e)
2019/05/20(月) 18:18:34.53ID:IJBxlZ980 仕事で出会った、いろいろな人を思い出すに、ガチに使える人材って凄いからなあ。
学校や仕事を通じて学ぶ、みたいな次元じゃないんだよねえ。
学校や仕事を通じて学ぶ、みたいな次元じゃないんだよねえ。
573デフォルトの名無しさん (アウアウエー Sa6a-ZkGz)
2019/05/20(月) 19:49:19.18ID:Nbm/sW0Oa おまえが使ってるんだったらおまえが偉いよ
574デフォルトの名無しさん (ワッチョイ ae2c-uMtI)
2019/05/21(火) 00:42:18.33ID:jVHVO/YL0 setbuf関数っていつなんの為に使うんや?
バッファリングのためにあるのはわかるけどそもそもバッファリングがなんの為にあるのかわからん
バッファリングのためにあるのはわかるけどそもそもバッファリングがなんの為にあるのかわからん
575デフォルトの名無しさん (ワッチョイ 1c79-N32O)
2019/05/21(火) 00:44:38.83ID:Hcv2vO/e0 ちまちま出力するより溜めてからまとめて出力した方が高速
576デフォルトの名無しさん (ワッチョイ ae2c-uMtI)
2019/05/21(火) 01:29:10.75ID:jVHVO/YL0 1万文字くらいのテキストファイルを標準出力でやってみたけど変わった気しなかったぞ
もしかして数百万文字レベルの巨大ファイルだと劇的に変わるんか?
もしかして数百万文字レベルの巨大ファイルだと劇的に変わるんか?
577デフォルトの名無しさん (ワッチョイ 73c3-AU7T)
2019/05/21(火) 01:34:19.46ID:XM845/F70 10kbって小さくね
578デフォルトの名無しさん (アウアウカー Sa0a-ZkGz)
2019/05/21(火) 01:46:59.05ID:+xvLcOVEa というか普通はバッファリングする関数ばっかりだが、自前でバッファ用意したいときもあるって話。
基本変わらんよたぶん。
基本変わらんよたぶん。
579デフォルトの名無しさん (ワッチョイ ae2c-uMtI)
2019/05/21(火) 01:47:43.41ID:jVHVO/YL0 確かに少ないな
と思ったんで2,700kbでやってみたらむしろ4秒長くなったぞ
と思ったんで2,700kbでやってみたらむしろ4秒長くなったぞ
580デフォルトの名無しさん (ワッチョイ 9602-XAPB)
2019/05/21(火) 02:21:13.21ID:Y+BS98b80 >>574
FILE * 経由で出力する printf() 等は内部でバッファリングしていてバッファがいっぱいになったらまとめて出力する(出力先が端末の場合は行単位で出力する)。
そのバッファを自分で指定した領域を使わせるか、またはなしにできるのが setbuf()。更に自由に大きさやモードも指定したいなら setvbuf() を使う。
バッファリングに関して考慮しなくても良い入出力をする場合は read(), write() で行う。この場合は全くバッファリングされないので少ないバイト数の入出力が多いと遅くなる。
それと printf() のようなフォーマットを考慮した出力はないので必要なら自作する。
FILE * 経由で出力する printf() 等は内部でバッファリングしていてバッファがいっぱいになったらまとめて出力する(出力先が端末の場合は行単位で出力する)。
そのバッファを自分で指定した領域を使わせるか、またはなしにできるのが setbuf()。更に自由に大きさやモードも指定したいなら setvbuf() を使う。
バッファリングに関して考慮しなくても良い入出力をする場合は read(), write() で行う。この場合は全くバッファリングされないので少ないバイト数の入出力が多いと遅くなる。
それと printf() のようなフォーマットを考慮した出力はないので必要なら自作する。
581デフォルトの名無しさん (ワッチョイ 9602-XAPB)
2019/05/21(火) 02:26:07.71ID:Y+BS98b80 >>576
open()してwrite()で1バイトづつ書くのとまとめて書くのとではバイト数によっては大幅に違いが出ると思う。環境依存ではあるが。
open()してwrite()で1バイトづつ書くのとまとめて書くのとではバイト数によっては大幅に違いが出ると思う。環境依存ではあるが。
582デフォルトの名無しさん (ワッチョイ ae2c-uMtI)
2019/05/21(火) 03:47:59.45ID:jVHVO/YL0 >>581
大きなファイルの入出力を高速化したい時はsetbuf(fp,buf)
バッファリング無しにしてバッファをフラッシュするタイミングを順番に逐一実行させたい時はsetbuf(fp,NULL)
みたいな感じでええんかな?
大きなファイルの入出力を高速化したい時はsetbuf(fp,buf)
バッファリング無しにしてバッファをフラッシュするタイミングを順番に逐一実行させたい時はsetbuf(fp,NULL)
みたいな感じでええんかな?
583デフォルトの名無しさん (ワッチョイ 9602-XAPB)
2019/05/21(火) 03:58:34.93ID:Y+BS98b80 >>582
setvbuf()で自分でバッファの大きさ決めてしまった方が良いかも。
setvbuf()で自分でバッファの大きさ決めてしまった方が良いかも。
584デフォルトの名無しさん (ワッチョイ a601-uGxO)
2019/05/21(火) 04:24:32.31ID:zmxtmgNI0 既出かもしれませんがconstがjavaのfinalと違うと知りました。どう違うのでしょうか?c初心者です
585デフォルトの名無しさん (ワッチョイ 4101-MvwS)
2019/05/21(火) 05:39:22.97ID:SRv5ILQj0 >>576
OSによってはHDDへ遅延書き込みするから、結局バッファしてるのと大して変わらなかったりする。
OSによってはHDDへ遅延書き込みするから、結局バッファしてるのと大して変わらなかったりする。
586デフォルトの名無しさん (ワッチョイ 462d-EL+e)
2019/05/21(火) 06:44:08.98ID:UPiNM42a0 >>584
20年前くらいの知識で、しかも完全に理解してるわけではないので、間違っていたらゴメンだけど。
変数について言えば、Java の final 変数は、値が未定義かどうか、という情報を内部的に持っていて。
もし、変数の値が未定義の場合は、1回だけ代入できたはず。例えば
final int i;
System.out.println("test");
i=4;
System.out.println(i);
i=5;
System.out.println(i);
の場合、1回目の代入(i=4)は許されるけど、2回目の代入(i=5)は怒られる。
それに対して、(C89の頃のだけど)Cのconst変数は・・・
const int i;
printf("test\n");
i=0;
printf("%d\n",i);
1回目の代入(i=0)であっても怒られる。
みたいな感じの違いはあったような。最近のCやJavaは知らないんだけどね。
あまり自信がないので、詳しい方のレスを待ちましょう。
20年前くらいの知識で、しかも完全に理解してるわけではないので、間違っていたらゴメンだけど。
変数について言えば、Java の final 変数は、値が未定義かどうか、という情報を内部的に持っていて。
もし、変数の値が未定義の場合は、1回だけ代入できたはず。例えば
final int i;
System.out.println("test");
i=4;
System.out.println(i);
i=5;
System.out.println(i);
の場合、1回目の代入(i=4)は許されるけど、2回目の代入(i=5)は怒られる。
それに対して、(C89の頃のだけど)Cのconst変数は・・・
const int i;
printf("test\n");
i=0;
printf("%d\n",i);
1回目の代入(i=0)であっても怒られる。
みたいな感じの違いはあったような。最近のCやJavaは知らないんだけどね。
あまり自信がないので、詳しい方のレスを待ちましょう。
587デフォルトの名無しさん (ドコグロ MM02-A+mh)
2019/05/21(火) 06:49:56.40ID:tdstqwiHM >>585
そっちもあるけどAPI呼出し回数の削減もあるから
そっちもあるけどAPI呼出し回数の削減もあるから
588デフォルトの名無しさん (オッペケ Sr88-2aw6)
2019/05/21(火) 07:08:29.24ID:6muVxYSDr >>585
今どきのディスクならほぼ遅延書き込みしてるといってもいいね
バッファには二段階あって、
@プロセスが持ってるバッファ
AOSが持ってるバッファ
flush関係のライブラリ関数やシステムコールは@をAに吐き出す
Aを吐き出すにはLinuxだとfsyncもしくはfdatasync
今どきのディスクならほぼ遅延書き込みしてるといってもいいね
バッファには二段階あって、
@プロセスが持ってるバッファ
AOSが持ってるバッファ
flush関係のライブラリ関数やシステムコールは@をAに吐き出す
Aを吐き出すにはLinuxだとfsyncもしくはfdatasync
589デフォルトの名無しさん (アウアウウー Sa83-RNyv)
2019/05/21(火) 09:19:53.31ID:BVi2WQ22a >>584
Cはポインタの指す先が const という指定ができるがJavaは配列の要素まで final にする指定ができなかったと思う。
つまり配列やクラスそのもののインスタンスへの参照は final にてきる。しかし参照される中身までは final にできず書き換え可能(クラスの場合はpublicのクラス変数とか、外部から書き換えられるようになっていれば書き換えられる)。
ま、ちょっと試してみな。
Cはポインタの指す先が const という指定ができるがJavaは配列の要素まで final にする指定ができなかったと思う。
つまり配列やクラスそのもののインスタンスへの参照は final にてきる。しかし参照される中身までは final にできず書き換え可能(クラスの場合はpublicのクラス変数とか、外部から書き換えられるようになっていれば書き換えられる)。
ま、ちょっと試してみな。
590デフォルトの名無しさん (ワッチョイ f6d2-cXFR)
2019/05/21(火) 10:05:33.15ID:DLRGb2lZ0 LTOのオプション
を使ってコンパイルすれば
インライン関数をヘッ
ダーに書かなくても
勝手にインライン化できるものはインラ
イン化してくれる
という理解で
あってますか?
を使ってコンパイルすれば
インライン関数をヘッ
ダーに書かなくても
勝手にインライン化できるものはインラ
イン化してくれる
という理解で
あってますか?
591デフォルトの名無しさん (アウアウウー Sa83-RNyv)
2019/05/21(火) 10:21:18.62ID:BVi2WQ22a >>590
それコンパイラ依存なのでは?
それコンパイラ依存なのでは?
592デフォルトの名無しさん (ササクッテロル Sp88-uMtI)
2019/05/21(火) 12:55:43.68ID:PZq+OQZ5p593デフォルトの名無しさん (ワッチョイ ae2c-rckI)
2019/05/21(火) 15:23:18.72ID:ZAINLMmO0 Linux では、HDD へ書き込むのは、デフォルトで、5秒に1回
USB メモリで、書き込み回数を減らしたい場合は、
15秒に1回とかに設定する人もいる
USB メモリで、書き込み回数を減らしたい場合は、
15秒に1回とかに設定する人もいる
594デフォルトの名無しさん (オッペケ Sr88-2aw6)
2019/05/21(火) 18:23:31.31ID:6muVxYSDr595デフォルトの名無しさん (ササクッテロル Sp88-Qul6)
2019/05/21(火) 18:37:21.97ID:G/IUf+gXp C言語のfprintfを用いるときに、前行の改行を消す方法をご存知ないですか?
エスケープシーケンスでバックスペースを試したのですか上手くいかなくて困っています。
状況としてはfor文を用いて改行を含んだ文字列を繰り返し出力させているんですが、最後の行だけ改行を無くし、続けて別の文を出力したいのです。
繰り返しの回数を変えて最後に改行なしの処理をいれればいいと思うのですが、簡単な方法があればと思い質問させていただきました。
よろしくお願いします。
エスケープシーケンスでバックスペースを試したのですか上手くいかなくて困っています。
状況としてはfor文を用いて改行を含んだ文字列を繰り返し出力させているんですが、最後の行だけ改行を無くし、続けて別の文を出力したいのです。
繰り返しの回数を変えて最後に改行なしの処理をいれればいいと思うのですが、簡単な方法があればと思い質問させていただきました。
よろしくお願いします。
596デフォルトの名無しさん (ワッチョイ 3f01-pg4x)
2019/05/21(火) 18:40:11.67ID:UdJL+OJH0 ストリームの撒き戻しは難しいんじゃないか? 表示装置なのかファイルなのかでも変わるだろうし…
597デフォルトの名無しさん (ワッチョイ 1c79-N32O)
2019/05/21(火) 18:54:48.20ID:Hcv2vO/e0 ファイルポインタは巻き戻せる
標準出力ならエスケープシーケンスで右上に行けばいい
標準出力ならエスケープシーケンスで右上に行けばいい
598デフォルトの名無しさん (ワッチョイ ee02-8NB0)
2019/05/21(火) 19:19:14.41ID:IJ+i04U80 こんな感じでいいのか?
#include <stdio.h>
int main(void) {
FILE* fp;
fp = fopen("Test.txt","w");
fprintf(fp,"hoge\n");
fseek(fp,-1,SEEK_CUR); /* 改行2byteなら-2 */
fprintf(fp,"fuga\n");
fclose(fp);
return 0;
}
#include <stdio.h>
int main(void) {
FILE* fp;
fp = fopen("Test.txt","w");
fprintf(fp,"hoge\n");
fseek(fp,-1,SEEK_CUR); /* 改行2byteなら-2 */
fprintf(fp,"fuga\n");
fclose(fp);
return 0;
}
599デフォルトの名無しさん (ワッチョイ 462d-EL+e)
2019/05/21(火) 19:53:55.55ID:UPiNM42a0 質問者が知りたい情報とは違うので、スルー推奨かもですが。
もし自分が、同じことをやれ、と言われたら。
「改行を含んだ文字列」を、「改行」と「それ以外の文字列」の2つに分けて、別々に出力しようとするかなあ。
ループの回数を変える必要はなくて。イメージとしては
for() ※行単位のループ
{
if(最初の行でなければ) fprintf で「改行」を出力
fprintf で「それ以外の文字列」を出力
}
fprintf で「別の文を出力」
もし自分が、同じことをやれ、と言われたら。
「改行を含んだ文字列」を、「改行」と「それ以外の文字列」の2つに分けて、別々に出力しようとするかなあ。
ループの回数を変える必要はなくて。イメージとしては
for() ※行単位のループ
{
if(最初の行でなければ) fprintf で「改行」を出力
fprintf で「それ以外の文字列」を出力
}
fprintf で「別の文を出力」
600デフォルトの名無しさん (ドコグロ MM02-A+mh)
2019/05/21(火) 19:58:03.98ID:kdkwqODuM >>595
bool First = true;
for( … ){
if(First){
First = false;
} else {
fprintf("¥n");
}
fprintf( … );
}
bool First = true;
for( … ){
if(First){
First = false;
} else {
fprintf("¥n");
}
fprintf( … );
}
601デフォルトの名無しさん (ドコグロ MM02-A+mh)
2019/05/21(火) 19:58:35.62ID:kdkwqODuM あっ、被ったや
602デフォルトの名無しさん (ワッチョイ ee02-8NB0)
2019/05/21(火) 20:07:13.38ID:IJ+i04U80 ファイルが標準出力等でvt100互換端末であれば。
#include <stdio.h>
#include <string.h>
int main(void) {
int i;
i=fprintf(stdout,"hogehogehogehoge\n");
if (0) fprintf(stdout,"\E[01Afuga%*c\n",i,' '); /* これか? */
else fprintf(stdout,"\E[01A\E[%02dCfuga\n",i-strlen("\n")); /* あるいはこれか? */
return 0;
}
cmdとかdos窓なら無理?
#include <stdio.h>
#include <string.h>
int main(void) {
int i;
i=fprintf(stdout,"hogehogehogehoge\n");
if (0) fprintf(stdout,"\E[01Afuga%*c\n",i,' '); /* これか? */
else fprintf(stdout,"\E[01A\E[%02dCfuga\n",i-strlen("\n")); /* あるいはこれか? */
return 0;
}
cmdとかdos窓なら無理?
603デフォルトの名無しさん (ササクッテロル Sp88-Qul6)
2019/05/21(火) 20:22:57.69ID:G/IUf+gXp604デフォルトの名無しさん (スププ Sd94-AU7T)
2019/05/21(火) 20:31:17.43ID:JOJ6V6qzd プログラムいじられるなら、改行出す方をどうにかした方が良さそうだが
605デフォルトの名無しさん (ワッチョイ aaf9-8NB0)
2019/05/21(火) 20:31:52.25ID:8vKfOnx40 ansi.sysを組み込めばVT100互換エスケープシーケンスが
という昔話…と思ったが、ググったらvistaまであったんだな驚き
Windows 10 Threshold 2(10.0.1058)ではコマンドプロンプトでANSI/VT100互換表示が可能に
というスラドの記事も出た
という昔話…と思ったが、ググったらvistaまであったんだな驚き
Windows 10 Threshold 2(10.0.1058)ではコマンドプロンプトでANSI/VT100互換表示が可能に
というスラドの記事も出た
606デフォルトの名無しさん (アウアウウー Sa83-RNyv)
2019/05/21(火) 20:52:46.26ID:BVi2WQ22a 最後に改行出すんじゃなくて最初に改行出すようにすれば良いだけでは?
一番最初の行だけは最初に出さなければ良いだけ。
バッファリングされて出力されないのが嫌なら行末でfflush()する。
一番最初の行だけは最初に出さなければ良いだけ。
バッファリングされて出力されないのが嫌なら行末でfflush()する。
607デフォルトの名無しさん (ワッチョイ aa01-A+mh)
2019/05/21(火) 21:47:10.75ID:n1jvW3Ih0608デフォルトの名無しさん (ワッチョイ 9602-XAPB)
2019/05/21(火) 22:06:40.11ID:Y+BS98b80609デフォルトの名無しさん (ワッチョイ 1e01-Qul6)
2019/05/21(火) 22:09:47.12ID:JtLDtEYt0610デフォルトの名無しさん (ワッチョイ dfb9-9b2Z)
2019/05/24(金) 09:00:19.45ID:h3dkW7YJ0 C言語はクラスが無い。
それは実際どれくらい問題になりますか?
昔C使ってたけど、本格的な抽象的設計をやってたわけじゃなくて、
最近Java使っててそういうのをやりだしたけど、
今思い返してみるとC言語はクラスや継承や多態性が無いから
かなり厳しい言語なんじゃないかな、と思ったんです。
メジャーなカーネルがCで作られてるという事実に驚愕します。
クラス無しで大規模開発は不可能としか思えません。
それどころか、1アルゴリズムの実装でもクラスは有用だと思うんですが。
最近、NimとかRustのようなCを代替するかもしれない勢いのある言語があります。
そういう言語はかなり抽象的な設計が可能です。
そういうのと比べると、小さなデバイスドライバみたいなものはCでいいだろうけど、
大規模開発におけるCはかなり無理があるんじゃないかな?と
そうでもないものですか?
それは実際どれくらい問題になりますか?
昔C使ってたけど、本格的な抽象的設計をやってたわけじゃなくて、
最近Java使っててそういうのをやりだしたけど、
今思い返してみるとC言語はクラスや継承や多態性が無いから
かなり厳しい言語なんじゃないかな、と思ったんです。
メジャーなカーネルがCで作られてるという事実に驚愕します。
クラス無しで大規模開発は不可能としか思えません。
それどころか、1アルゴリズムの実装でもクラスは有用だと思うんですが。
最近、NimとかRustのようなCを代替するかもしれない勢いのある言語があります。
そういう言語はかなり抽象的な設計が可能です。
そういうのと比べると、小さなデバイスドライバみたいなものはCでいいだろうけど、
大規模開発におけるCはかなり無理があるんじゃないかな?と
そうでもないものですか?
611デフォルトの名無しさん (アウアウエー Sa9f-eVvB)
2019/05/24(金) 09:04:22.51ID:a6wIXg41a まあファイルがクラスと同じだし。
継承はしづらいけど、そんなもん使ったらC++でもむしろ見通し悪くなるでしょ?
継承はしづらいけど、そんなもん使ったらC++でもむしろ見通し悪くなるでしょ?
612デフォルトの名無しさん (ワッチョイ dfa5-vAXu)
2019/05/24(金) 10:11:20.70ID:M2ZwKTAn0 最大のデバイスドライバがOSのカーネルなんじゃねえの
そしてそれがC言語の限界
そしてそれがC言語の限界
613デフォルトの名無しさん (ワッチョイ dfb9-9b2Z)
2019/05/24(金) 10:43:06.36ID:h3dkW7YJ0 Linuxカーネルは2100万行を超えているそうなので
たぶん地球上でもっとも大規模な開発の1つです。
たぶん地球上でもっとも大規模な開発の1つです。
614デフォルトの名無しさん (ワッチョイ bf8c-GX6Y)
2019/05/24(金) 11:21:47.36ID:0dR+L/D60 責任ある人は気がくるっているじゃない。
615デフォルトの名無しさん (アウアウウー Saab-EYzY)
2019/05/24(金) 12:25:59.56ID:Cw+6mW4za Cでもオブジェクト指向的に考えて作ることは可能。構造体へのポインタまたは情報を区別する番号などを渡してその中身に基づいて処理する関数作ればいいので。
ファイルアクセスとかは作りがそうなってるよね。
ファイルアクセスとかは作りがそうなってるよね。
616デフォルトの名無しさん (ワッチョイ c7d2-Fpyl)
2019/05/24(金) 12:32:21.84ID:M3xcEept0 クラスはコンストラクタ/デストラクタは活用したけど
継承で面倒になって、ちょっと便利な関数付き構造体としてしか設計したことない。
継承で面倒になって、ちょっと便利な関数付き構造体としてしか設計したことない。
617デフォルトの名無しさん (ブーイモ MMcb-/OyN)
2019/05/24(金) 12:35:03.01ID:C+5joBz9M C言語ではオブジェクト指向も関数型プログラミングもできる。その下位レイヤーだから。
面倒臭いけど。
面倒臭いけど。
618デフォルトの名無しさん (ドコグロ MM9f-LXA5)
2019/05/24(金) 12:50:51.48ID:8pSuDyEhM >>613
デバドラとかが山ほどあるだけでコア部分はそんなにたいしたことないよ
デバドラとかが山ほどあるだけでコア部分はそんなにたいしたことないよ
619デフォルトの名無しさん (ドコグロ MM9f-LXA5)
2019/05/24(金) 12:53:08.72ID:8pSuDyEhM620デフォルトの名無しさん (アウアウウー Saab-EYzY)
2019/05/24(金) 12:59:14.48ID:Cw+6mW4za まあしかしC++は複雑怪奇な状態になったような感じがするのでなんか別の言語でオブジェクト指向やった方が良いような気がする。
621デフォルトの名無しさん (ワッチョイ c7da-YLUn)
2019/05/24(金) 13:49:11.26ID:FIKXvkBI0 Javaがとてもシンプルな言語に見えてくる
622デフォルトの名無しさん (スププ Sdff-OWKl)
2019/05/24(金) 14:27:11.63ID:YkjJvwKvd linux kernelなんておもくそオブジェクト指向的な構造だろ
623デフォルトの名無しさん (ワッチョイ e701-/OyN)
2019/05/24(金) 19:13:34.31ID:E0qJKDus0 関係ないけどOOPが流行り始めた頃に「WindowsのUIはオブジェクト指向だ」と言ってたやつを思い出した。
624デフォルトの名無しさん (ワッチョイ 7f63-buEI)
2019/05/24(金) 19:26:36.07ID:omgaeJxY0 目指していた方向はそうだったと思う
628デフォルトの名無しさん (アウアウウー Saab-EYzY)
2019/05/24(金) 20:41:47.14ID:1FXcUtRQa いやできなくはないよ。何せC++は元々はCへのコンバータだったしな。C++のソースを読んでC言語に変換して後のことはCコンパイラに任せてたんだよ。それが初期のC++。
もちろんCは言語そのものがオブジェクト指向をサポートしてないから人間がそれをやろうとするととても面倒な事になるけどな。
もちろんCは言語そのものがオブジェクト指向をサポートしてないから人間がそれをやろうとするととても面倒な事になるけどな。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 自民 国会議員の歳費 月額5万円引き上げ 今国会での成立目指す [どどん★]
- 「クラウンに乗りたかった」東京・足立の車暴走 男性、容疑を否認★2 [七波羅探題★]
- 相次ぐ中国公演中止に、シンガーソングライターらが続々高市首相に怒り表明「隣国の仲間たちに対して申し訳ない」★3 [muffin★]
- 志らく、高市首相を批判する人々は「日本人じゃないの?」SNSで賛否 野党議員が一斉批判「差別発言」「非国民扱いするコメンテーター」 [muffin★]
- 東京・足立区の盗難車死亡ひき逃げ事件 11人死傷のうち死亡した男女の身元を発表 80代の男性と20代フィリピン国籍の女性 警視庁 [どどん★]
- 《降板の申し出が》「平手友梨奈は出ません」ムロツヨシの「弁護士ドラマ」から“バディ”が消える!連ドラ撮影中にも遅刻、欠席… [Ailuropoda melanoleuca★]
- ( ´・ω・` )ひって天気わーり
- 話ガール
- ウマ娘のブエナビスタちゃんのキャラストーリー、コッテコテのラブコメの模様
- つなぎばっかり着てるけどどんなイメージ?
- VIPでアズールレーン
- 自民党閣僚関係者「党内外問わず高市総理に批判的なことを言える空気ではない」 [834922174]
