風で飛んでいくチラ裏

気ままに雑記メモ書き殴り。古い記事は別blogからの引っ越しなのでレイアウトがアレです。

CFAQを読む - 3

http://www.kouno.jp/home/c_faq/c2.html#0 間が開いたけど続き。 2.14, 2.15 うーん、使いどきがいまいち分からない。 わざわざ構造体メンバのバイトオフセットを知りたい状況か…。うーん。 2.18 この手の凡ミスだけど見つかりづらいバグは、分からない時は延々悩み続けるけど、 見つかった時の残念かつ不思議な開放感は病みつきに…なるわけないね。 順番的には、 ・define ・構造体、enum定義 ・内部関数プロトタイプ宣言 ・関数実装 かなぁ。そうすっと書きミスった時にコンパイルエラーしてくれるかも? 2.20 unionの最初はバイト配列とかにすると初期化楽かな。 2.22 Cのenumは基本整数ですよ、って話。 本来列挙型ってのがあるとプログラマ的には助かるよねってことだろね。 JAVAとかはそうだよね。 3.1 副作用コードは単に式中にぽろっと書かれているだけなら見つけやすいんだけど、 マクロの中に書かれたりしてると厄介。 マクロの作った人が思いもよらない使い方をすると起こったりするかもね。 ほんとは副作用は極力排除するようなマクロを作るんだろうね。 3.2 こんな書き方しなきゃいけない状況がよく分からないがw 式完了後のiの値が9であるってことは保証されてるのかな。 →されてませんでした。一旦未定義にぶち当たると、以降は何も保証されません。 3.3 7w 未定義な振る舞いはもう何も保証されないんだよね。たとえCPUが壊れるような 動作をしようとも。 3.4 演算子同士の優先順位は決まってるし、()で制御できるけど、関数コールや副作用は それでは制御できないってことだよね。 3.5 &&、||は左から右に評価する。 そのことを前提にしている評価式とかもよくあるよね。 if(src != NULL && strlen(src) < 10) // NULLチェックが必ず先に動くことが保証されるのでOK 3.8 日本語ムズカシイ。1つの副作用完了点間では、書き込む値は1個にすべき、ってことかな。 3.12 i++と++iどっちかぁ。個人的には副作用結果を欲しいだけの場合でも i++ をよく使うような気がする。 3.14 > 整数変数同士割算をおこなって結果を浮動小数点型の変数に代入する ときにも同じような問題が起こる。 やりました。しかもマクロの中でやってたので、括弧地獄。 3.16 おお、すごい。 アドレスを生み出す値にして、それのアドレス演算子で代入先を作りなおすのか。 …if文書いた方がよっぽどいいですよね。うん。 ここまで。