- 1 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 12:11:46.61 ID:xxeaCAplM.net]
- !extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください) C言語の話題のみ取り扱います C++の話題はC++スレへ 質問には最低限の情報(ソース/コンパイラ/OS)を付ける 数行で収まらないソースは以下を適当に使ってURLを晒す https://paiza.io/ https://ideone.com/ codepad.org/ C17 www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf C11 www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf C99 www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf kikakurui.com/x3/X3010-2003-01.html C FAQ 日本語訳 www.kouno.jp/home/c_faq/ JPCERT C コーディングスタンダード https://www.jpcert.or.jp/sc-rules/ ※前スレ C言語なら俺に聞け 157 https://mevius.5ch.net/test/read.cgi/tech/1624846971/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
- 321 名前:デフォルトの名無しさん [2022/03/12(土) 00:08:34.44 ID:NOu0XfGq0.net]
- >>310
32bit環境なら大きい領域は早めに確保するか、 あるいはmallocじゃなくAPIで確保したい領域のアドレスを逆方向から取得
- 322 名前:デフォルトの名無しさん [2022/03/12(土) 01:41:51.18 ID:NpUzvYny0.net]
- >>308
普通のアプリ動かしているだけなのにOSが落ちるとすると、そのOSは何かおかしい。OSにバグがあるのではないか?
- 323 名前:デフォルトの名無しさん mailto:sage [2022/03/12(土) 13:07:51.07 ID:aRaeBtiY0.net]
- 普通に車を運転してたら事故った
車に欠陥があるはず
- 324 名前:デフォルトの名無しさん mailto:sage [2022/03/12(土) 15:32:14.60 ID:XvQpUkSW0.net]
- 九州のタクシー暴走事故はプリウスのせいだと思っている。
- 325 名前:デフォルトの名無しさん mailto:sage [2022/03/12(土) 16:34:06.63 ID:aRaeBtiY0.net]
- プリウスの制御プログラムを書いた人、ここにいませんか?
- 326 名前:デフォルトの名無しさん mailto:sage [2022/03/12(土) 18:00:40.48 ID:WugjRoTQM.net]
- 仮にいたとしても名乗り出ないだろw
- 327 名前:デフォルトの名無しさん mailto:sage [2022/03/12(土) 18:10:20.20 ID:kaM/Ypx70.net]
- >>318
当然、疑うことだね
- 328 名前:デフォルトの名無しさん mailto:sage [2022/03/12(土) 18:29:57.19 ID:0pfFD5zX0.net]
- ドライバーの単体テストは実施してたんですか?
- 329 名前:デフォルトの名無しさん [2022/03/12(土) 23:53:51.20 ID:NpUzvYny0.net]
- >>318
それは今回の話には当てはまらない。普通のアプリを動かしていたらアプリが落ちた、だったら当てはまる。 今回の話を喩えるなら普通の車を運転していたら道路が陥没したみたいになる。OSの方が落ちたんだから。
- 330 名前:デフォルトの名無しさん mailto:sage [2022/03/12(土) 23:56:33.44 ID:aRaeBtiY0.net]
- そうか?
池袋事故では最後まで車の欠陥を主張してたぞ 普通にって表現は、あくまでも本人の主観だからな
- 331 名前:デフォルトの名無しさん mailto:sage [2022/03/13(日) 00:27:55.58 ID:8TmiOcWs0.net]
- 上級国民は医師に運転を止められていた欠陥アプリなので、譬喩に用いるには特殊すぐる。
- 332 名前:デフォルトの名無しさん mailto:sage [2022/03/13(日) 00:30:40.49 ID:giayljWn0.net]
- 事故起こした奴って自分が原因だと思ってないだろう
- 333 名前:デフォルトの名無しさん mailto:sage [2022/03/13(日) 06:05:08.20 ID:g8VV1ENe0.net]
- 常に自分を疑え、なんて根性論めいた主張には興味ないし
弁護士に譲歩的なことを言うなと指示されて本当に思っていることと違うことを陳述するのもこの議論とは関係ない
- 334 名前:デフォルトの名無しさん mailto:sage [2022/03/13(日) 06:10:49.96 ID:kdm08K3Td.net]
- >>308
多用、ってのがおかしいな 一ヶ月も動かし続けてたらどうしても多用になる それで落ちるようなことはWin95とかの時代の話だろ
- 335 名前:デフォルトの名無しさん mailto:sage [2022/03/13(日) 11:39:10.82 ID:HQz48e8Z0.net]
- >>308
malloc,freeを多用すると 解放し忘れが多くなり メモリが断片化して 新規メモリが確保できなくなってエラー吐いてんのに エラーチェックもせずにポインターにアクセス そしてプログラムが落ちる さらにOSを巻き込んでPCごと落ちる でも今時のOSは生半可なことでは巻き込まれない
- 336 名前:デフォルトの名無しさん mailto:sage [2022/03/13(日) 17:40:39.42 ID:5qwn5s+60.net]
- 解放し忘れ(メモリリーク)と断片化は別概念
16byteを4回確保した後に1回目と3回目で確保したメモリだけ解放すると、 合計32byte空いてるのに飛び地になってるから32byte領域として扱えない
- 337 名前:デフォルトの名無しさん mailto:sage [2022/03/13(日) 22:53:37.11 ID:A2eUK16/a.net]
- malloc/freeを多用すると解放忘れが多くなるものなのか?
- 338 名前:デフォルトの名無しさん mailto:sage [2022/03/14(月) 01:27:18.72 ID:OOlFm33n0.net]
- そりゃプログラムがおかしいだけ
- 339 名前:デフォルトの名無しさん mailto:sage [2022/03/14(月) 10:46:27.63 ID:z8DyGqYY0.net]
- C言語ではなくスクリプトだが、
無限にSubdirを掘り続ける奴書いて動かしたら、OS落ちたな XPだったが
- 340 名前:デフォルトの名無しさん mailto:sage [2022/03/14(月) 11:00:21.69 ID:GQP59fXj0.net]
- fork爆弾みたいな実験か
- 341 名前:デフォルトの名無しさん mailto:sage [2022/03/14(月) 16:40:21.91 ID:LP3GQSIPd.net]
- OS名はあえて書かないが
Visual C++のmallocで1GBを256回確保しただけで落ちたな
- 342 名前:デフォルトの名無しさん [2022/03/14(月) 17:46:29.09 ID:OOlFm33n0.net]
- Windowsは昔から落ちやすい印象
なんというか、OS自体もなんか少しユルい上にみんなして色んなドライバ作って組み込むもんだから余計に落ち易くなってんじゃないかな。
- 343 名前:デフォルトの名無しさん mailto:sage [2022/03/14(月) 17:51:09.33 ID:L/zgcwZ50.net]
- Win98で512バイトぐらいをいくつmalloc出来るかと試したことがあって、
10万回ちかくでNULL返した・・・いや、1万回だったかな?。 とりあえずOSもアプリも落ちなかった。
- 344 名前:デフォルトの名無しさん [2022/03/15(火) 21:09:49.60 ID:uaV7elHUM.net]
- >>249
教えられてないし誰も知らないしwhile(1)で事足りるから ::printfとかもな わざわざ使ってるやつはアホだと思う
- 345 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 21:12:16.49 ID:oV08M4Ak0.net]
- あなたの基準では世界中アホだらけやな
- 346 名前:デフォルトの名無しさん [2022/03/15(火) 21:19:55.67 ID:uaV7elHUM.net]
- 一部のバカに対して言ってる
マジで::printfなんて使ってるやつなんて滅多にいない
- 347 名前:デフォルトの名無しさん [2022/03/15(火) 21:22:08.63 ID:uaV7elHUM.net]
- 誰も使ってない表記法使うアホのせいで改めて調べないといけなくなる
使われてないから敢えて教科書に書かれてないし教科書に書かれてないんだから知らないやつが多数派ってことがわからんバカ
- 348 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 00:50:46.44 ID:HRRT9pv8r.net]
- 知らなくて馬鹿にされたのかな?辛かったね、大変だったね。カワイソウニ(´;ω;`)ウッ…
- 349 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 05:23:40.43 ID:sZ1wd+Ly0.net]
- 有効範囲解決演算子はスレ違いだぞ
- 350 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 13:21:40.48 ID:IYkrMFX0r.net]
- Cに namespace の概念ってある?
- 351 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 13:45:31.87 ID:EozDCnXud.net]
- gotoラベル
構造体のtag名 構造体のメンバ名 それ以外 という概念のnamespaceならある typedef struct A{int A;} A; int main(){ A: return 0;} で4種類のAを区別できるというだけで、ns::A とかの話ではないが
- 352 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 14:57:34.41 ID:IYkrMFX0r.net]
- ああ
それぞれで固有の識別子を記憶する空間があるから ぱっとみの文字が衝突しててもセーフ という概念か コンパイラ記述するときにめんどくさそうね 文意からこっちのテーブルを参照すべきとか
- 353 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 11:24:46.11 ID:fvSihUDg0.net]
- 初歩的な質問ですが、
b = a++; という式はbにaの値を代入してからaをプラス1しますが、 演算子の優先度を考えると、++が優先度高く、=は右優先です 優先度の高い++をしてから代入するように感じるのですが そうならない理由をご教示ください
- 354 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 11:57:41.89 ID:VgIBj69P0.net]
- a++が返す値は、aをインクリメントする前の値だからだよ
- 355 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 12:07:43.36 ID:X795CU5ld.net]
- b=a++;
のインクリメントが実行されるのは式を評価した後
- 356 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 12:40:35.63 ID:fvSihUDg0.net]
- 返信ありがとうございます
演算子の優先度を調べると++が=より優先度が高いはずです 式の処理は優先度の高い演算子から処理されると理解しています そうすると、++が先に実行された後で=(代入)が実行されてもおかしくないと 考えたのですが、どこに誤りがあるのでしょうか?
- 357 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 12:53:26.53 ID:UXt2lmR80.net]
- そういう時のために
++i i++ ちゃんと2種類の書き方が用意されてるんだよ
- 358 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 12:55:08.49 ID:d0FibUHe0.net]
- >>351
> 式の処理は優先度の高い演算子から処理されると理解しています これが間違い。演算子の結合優先度と式の評価順は別。
- 359 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 12:56:54.66 ID:X795CU5ld.net]
- 演算子の結合順位と副作用完了点の概念は別
というか b=a;a=a+1; を1文で書くためにa++ 周りのの仕様を特別扱いして実現してる
- 360 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 13:30:03.55 ID:fvSihUDg0.net]
- 返信ありがとうございます
++、--の場合は、前置、後置で 式の評価順が通常と異なると覚えました 式の評価順を理論から理解していないので 忘れてしまって失敗するかもしれませんが、 そのうち定着すると思っています
- 361 名前:デフォルトの名無しさん [2022/03/19(土) 15:38:29.74 ID:CZI3HevE0.net]
- よくわからない場合や使うと分かり辛くなる場合は使わないで冗長な書き方した方が良いかも知れない。
使わなくても最近のコンパイラは最適化掛ければ適当にうまいことやって最終的に作られるコードは同じになる可能性が高いと思う。
- 362 名前:デフォルトの名無しさん [2022/03/19(土) 17:00:25.72 ID:mw5TX/57a.net]
- b = a++;
の右辺を評価した結果は aの元の値で、副作用として aのアドレスにあるオブジェクトをインクリメントしているのでは 代入されるのは aの内容でなく、アドレスを持たない値で
- 363 名前:デフォルトの名無しさん [2022/03/19(土) 17:03:51.29 ID:mw5TX/57a.net]
- a++ は右辺値で、 ++a は左辺値
- 364 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 17:12:51.80 ID:X795CU5ld.net]
- どっちも右辺値としないとまずい
int main(){ int a=0; int* p; p=&(++a); // コンパイルエラー p=&(a++); // こっちも }
- 365 名前:デフォルトの名無しさん [2022/03/19(土) 17:42:57.61 ID:mw5TX/57a.net]
- そうだね、失礼しました
- 366 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 17:50:05.80 ID:nPptgbtB0.net]
- : BassClass(
std::format (IdPrefix, index, numBank)),( std::format (NamePrefix, ++index, numBank)) ちょうどこんな感じのコンストラクタでラッパーするコード書いてたんだけど インクリメントしてない方までつられて増えちゃうんだよね C++のコード片でスマソン
- 367 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 18:11:19.38 ID:8Fsv/onud.net]
- d = ++a + b-- + --c + a++;
この結果は ++a; --c; d = a + b + c + a; b--; a++; だよね 実際はこんな書き方しないほうがいいがw
- 368 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 18:25:12.86 ID:d0FibUHe0.net]
- >>362
> d = ++a + b-- + --c + a++; > この結果は ++a と a++ とが順序付けされないので未定義動作。
- 369 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 18:39:08.49 ID:Uza1/JxDM.net]
- 両方未定義じゃね?
>>361 の方はちょっと自信ないが >>362 の ++a + a++ はダメだったような気がする
- 370 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 19:05:15.57 ID:9SMEw2CG0.net]
- 以下のような関数がインラインで実行されてるだけで、評価自体は++が先に行われてるんでないの?知らんけど
int inc(int* a) { int ret = *a; *a = *a + 1; return ret; }
- 371 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 19:10:54.79 ID:fJWxsuK3a.net]
- 引数の評価順なんてCPUでも変わるだろ。
- 372 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 20:25:22.26 ID:hj0ig94x0.net]
- 未定義動作警察だ!
未定義動作の動作は定義されていないのでコンパイラは何をしてもいい > d = ++a + b-- + --c + a++; このコードの場合、 ++a;--c;d=...; b--;a++;相当のコードを吐いてもいいし、 tmp=a;a=tmp+1;--c;d=...; b--;a=tmp+1; 相当のコードを吐いてもいい。 大抵は未定義動作がないことを前提に最適化をかけるが。 極端なことを言えば、d=42としてもいい。 この文の見た目の動作は定義されていないから
- 373 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 00:26:15.18 ID:dAApHicf0.net]
- fgetsのファイル終了・エラー時の戻り値がNULLなのはなぜですか?
他の入出力関係の関数の戻り値はEOFになっています いま入出力の勉強をしてるんですが、関数の引数や戻り値が少しずつ違うので覚えるのが難しいです 使っていくうちに覚えていくものでしょうか?
- 374 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 00:53:13.92 ID:tmhbCmKs0.net]
- 細かな仕様はよく使うもの以外は毎度調べるよ
まあCの関数は数が少ないから全部覚えてるって人も少なくないかも
- 375 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 00:57:50.69 ID:rKPZjyik0.net]
- よく使う関数の戻り値調べると面白いぞ
printfが何を返しているかとか、それは何故なのかとか 戻り値を使っている人を見たことがないけれど
- 376 名前:はちみつ餃子 mailto:sage [2022/03/20(日) 01:37:41.92 ID:u4Grkyrm0.net]
- >>361
こういう場合については未定義ではないが未規定の動作が含まれる。 副作用完了点の間で同一のオブジェクトに複数回の書き換えが生じた場合には未定義の動作となるが、 書き換えが一度の場合はその書き換えがどのタイミングで起こるかわからないというだけで、 未定義の挙動にはならない。
- 377 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 08:21:37.14 ID:e7HuEm7id.net]
- >>368
fgetsの戻り値は文字列へのポインタであり いっぽうEOFは文字(じゃなくてintだけど気分的には)なのだ
- 378 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 10:46:46.29 ID:+oGVYZOT0.net]
- 組み込みのソフトしていると
使わない関数が多くて忘れていきます
- 379 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 11:48:15.83 ID:w4XPcyomd.net]
- <stdio.h>は使えないとして組み込み系って使える標準ライブラリあるの?
- 380 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 12:55:28.41 ID:DiBIkIVz0.net]
- windows.h
- 381 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 13:05:34.82 ID:w4XPcyomd.net]
- 使える標準ライブラリを聞いたつもりなんだが
あと<Windows.h>はOS依存のライブラリな
- 382 名前:蟻人間 mailto:sage [2022/03/20(日) 13:25:28.64 ID:y5NxTTYed.net]
- 標準っていっても何の標準かわからん。
ANSI CとかC89とかあるだろ。
- 383 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 13:41:32.19
]
- [ここ壊れてます]
- 384 名前:ID:w4XPcyomd.net mailto: ANSI C, C89〜C17 の規格で存在を要求されてるライブラリ
組み込みコンパイラだとそもそもC89かC99しかサポートしてないだろうし、 fileIOとかは欠けてるだろうから何なら使えるか聞きたい 組み込みの環境も多数あるだろうから >>373 みたいな人が普段どういう関数使ってるか気になった [] - [ここ壊れてます]
- 385 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 13:42:12.13 ID:e7HuEm7id.net]
- それぞれ組み込むシステムに付属してるだろ
一元的な名前はない ひょっとしたらstdio.hという名前かもしれない
- 386 名前:デフォルトの名無しさん [2022/03/20(日) 14:14:31.30 ID:4KnLtgrc0.net]
- 組み込みって言っても小さくても Linux 動いちゃうようなのもあるし、何とも言えんな。
- 387 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 14:19:28.79 ID:BOo0cJz/a.net]
- string.h は普通に使えた
- 388 名前:はちみつ餃子 mailto:sage [2022/03/20(日) 17:31:23.40 ID:u4Grkyrm0.net]
- C の規格は「規格合致ホスト処理系」「規格合致フリースタンディング処理系」を規定していて、
フリースタンディング処理系はライブラリとして float.h iso646.h limits.h stdarg.h stdbool.h stddef.h stdint.h の内容に限定している。 この範囲なら実行環境に左右されずに用意できるはずという判断なんだろう。
- 389 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 19:31:33.68 ID:w4XPcyomd.net]
- 組み込み向けの最低限の規格があるのか
#defineとtypedefしかないが なるほどこれなら環境がどんなにショボくても用意できそう
- 390 名前:デフォルトの名無しさん [2022/03/20(日) 20:07:23.09 ID:mxx3UMQ+0.net]
- ファイルディスクリプタを使ってEOFを知りたいんだけどどうしたらいい?
普通にreadすりゃ0になるからわかるし、そもそもファイルなら
- 391 名前:求めたサイズより小さく読めるからわかるけど
ちょうどぴったりでreadしたあとに、つぎのreadをせずに知りたい feofとかファイルポインタだで使えんがや [] - [ここ壊れてます]
- 392 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 20:57:34.02 ID:cOd2oDpEM.net]
- unblocking modeでopenしたfdをreadして判定すれば
- 393 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 22:28:44.17 ID:aLyHOWc60.net]
- ファイルのサイズを取得して、そこへseek するとか?
そもそも、ファイルを開いて、ファイルの終わりにseek できるかも。 元々、ファイルの追記モードもあるぐらいだから
- 394 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 22:54:16.07 ID:pl7vy6aed.net]
- >ちょうどぴったりでreadしたあとに、つぎのreadをせずに知りたい
そもそもreadが終端まで来たらつぎにreadしてもファイルアクセスせずに0を返すから同じだろう
- 395 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 23:19:06.05 ID:dAApHicf0.net]
- >>372
よく分かりました ありがとうございます
- 396 名前:384 mailto:sage [2022/03/21(月) 16:21:59.97 ID:nqBLTVDb0.net]
- >>387
後出し情報であれやけど readしたデータをどこかに送信、最後のデータには最後フラグを立てる みたいなやつなので、ぴったりのときに困ってたんよ バッファを2面用意して、すぐ送信せず常に1回貯めて送信するのが 正解なんだろうなぁ・・・ まあいいけど
- 397 名前:デフォルトの名無しさん [2022/03/21(月) 17:02:36.51 ID:geQt3ukX0.net]
- ファイルサイズと読み出し位置から残りサイズ計算するぐらいか?
- 398 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 18:07:17.68 ID:bPJRBgFUM.net]
- >>389
ファイルサイズわかってるならlseek(fd, 0, SEEK_CUR) で現在位置調べりゃいいだけかと
- 399 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 21:41:26.44 ID:nqBLTVDb0.net]
- 一応、ファイルじゃないときのことも考慮したかった
- 400 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 22:38:50.94 ID:j56ex+kVd.net]
- ファイルディスクリプタが0とか"/dev/stdin"という名前のファイルを考慮し始めたらそれはもう無理じゃ?
- 401 名前:デフォルトの名無しさん [2022/03/21(月) 23:41:34.24 ID:/12E7ImH0.net]
- なんかバグやセキュリティホールの温床になりそうだな。
- 402 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 23:55:00.11 ID:avj/Dp0k0.net]
- キャッシュとか、同期・非同期処理とか、ブロックされる・されないとか、
ブロックデバイス・シーケンシャルかとか、リダイレクト・パイプとか、 共有の有無とか、メモリ内共有かどうかとか、 そんな事を考えだしたら、キリがない なんせ、Linux API の7割は、IO の説明だから、10年以上掛かる
- 403 名前:デフォルトの名無しさん [2022/03/22(火) 02:05:16.87 ID:vyk85loe0.net]
- 1バイト単位なら fdopen() しちゃって FILE * でバッファリングさせた方が楽だな。feof() も使えるし。
1バイト単位ではなく1000バイト単位とか、大きい塊でバッファリングする必要がある場合は自作して feof() みたいなチェックができるようにする。 (それでも FILE * でのバッファリングがあった方が遅いストレージにあるファイルなら読み出し効率上がると思うが)。
- 404 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 22:37:34.92 ID:jD8pMP9K0.net]
- 以下はライブラリバージョンが1より大きければ処理を有効する例です
#if LIBRARY_VERSION > 1 … #endif この「LIBRARY_VERSION」は何者ですか? どこに定義されているのでしょうか?
- 405 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 23:58:11.94 ID:ItLF0V9z0.net]
- >>397
少なくとも標準仕様ではどこにも定義されてないです 説明のための例では?
- 406 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 23:59:45.82 ID:bdM8JANZ0.net]
- MSVC環境ならカーソル合わせてF12キー押せばいい
gccとかは知らん
- 407 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 00:14:08.19 ID:sET9XTXv0.net]
- >>397
独習Cからの抜粋と予想して記載します 複数の開発環境で同じヘッダファイルを使用する際の
- 408 名前:宴Cブラリバージョンの差異でエラーとなるのを防ぐための
テクニックです 各自が自分の開発環境に合わせて #define LIBRARY_VERSION 1などと 定義する必要があります [] - [ここ壊れてます]
- 409 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 06:50:38.08 ID:0hAphrOld.net]
- いえ、それはそのライブラリの作者(メンテナンスしてる人)が標準ヘッダ内で定義すべき内容です
ユーザーは>>397を自分のファイル内で使用してバージョンの差異を吸収できます
- 410 名前:デフォルトの名無しさん [2022/03/26(土) 01:22:16.42 ID:EYuSPLit0.net]
- >>398,400,401
説明のための例のようですね、失礼しました あと、この定数が未定義の場合の値は0になるのですね そのあたりを理解していませんでした どうもありがとうございました
- 411 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 16:05:05.08 ID:EYuSPLit0.net]
- コンパイル(リンク)時に、同じプロジェクト内の別ソースの関数などを呼び出せるのはなぜ?
インクルードして教えてる訳でもないのに、もしかして全ソースを探しに行ってるんですか?
- 412 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 17:27:18.26 ID:T/pJeR6z0.net]
- 全ソースから探し出すのがリンク
includeとかで関数宣言だけは見えるようにする必要はあるが。 main.c ----------- char* func(int size); int main(){ char* p=func(16); } ----------- funcという名前の関数は、 前方宣言(1行目)してるのでリンク時に探しに行く。 リンク時の解決用に定義した関数(とその実装)を.objファイルに一覧としてまとめる。 リンクという作業では、.objと.libと.dllから"func"という名前の関数を探し出す。 見つからなかったり2つ以上見つかったらリンクエラーになる。 古いCだと前方宣言がなければ int func(); 決め打ちで前方宣言扱いしたりする。
- 413 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 18:26:49.41 ID:kmPIEuI7d.net]
- >>403
(古典的な)Cではアセンブラソースに変換してアセンブル→リンクされるが 通常の関数名や変数名はアセンブラのグローバルシンボルに変換され リンク時に他のアセンブラソースから参照できるようになる 一方関数内のローカル変数やstatic宣言された関数や変数はローカルシンボルとして扱われ他のアセンブラソースからは参照できなくなる
- 414 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 23:45:36.64 ID:EYuSPLit0.net]
- よく分かりました、ありがとうございました
- 415 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 21:02:14.58 ID:angONFKk0.net]
- グローバル変数の修飾子の意味は次の意味で合っているでしょうか?
修飾子なし:変数の実体を定義 extern修飾子:定義済みの変数を参照する static修飾子:変数の実体を定義して、その変数を他のファイルからexternさせない
- 416 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 11:08:20.21 ID:c4HYTfCO0.net]
- 適当にググって見つかったexternとstaticの解説
ttps://daeudaeu.com/extern/ ttps://daeudaeu.com/static/
- 417 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 00:24:04.59 ID:c+1KPnOj0.net]
- >>408
そのサイト含めいろいろ見て、それをまとめたのが>>407です 念のためどなたかに確認していただこうかと思って書き込みました
- 418 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 06:11:36.84 ID:7UUvIzLId.net]
- そんなに信用されてもw
- 419 名前:デフォルトの名無しさん [2022/03/29(火) 08:18:01.14 ID:C0VnxRTv0.net]
- 自分で色々なパターンでコンパイルして確認しないのかな?って思う。
- 420 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 08:55:46.71 ID:tKmNrPY6d.net]
- 正確な意味を知るには解説サイト見て回るより規格書見るほうがいい
real-c.info/indexDesc.html
- 421 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 13:03:41.11 ID:M0Gs9C4cM.net]
- llvm-14 の、ソースツリーの外にcmake ディレクトリができる下品な感じ、なんとかならないの?
|

|