C言語を学びたいんやが、まず何からやればいい?at TECHC言語を学びたいんやが、まず何からやればいい? - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト24:デフォルトの名無しさん 24/08/12 08:03:23.19 +jMHtzbv.net >>23 それは評価順が未規定なのでコンパイラによって結果は変わり得るし、基本的に避けるコードですね 後置インクリメントは「元の値を返した後に加算される」で、そのタイミングは正確には行の終わりじゃなくて式 (a++の部分) の評価時 つまり a + a++ は「a++ は1を返す」と評価した後にaがインクリメントされるので、評価順によっては左側のaが2になり得る x + y でxを先に評価するというルールはなくて、例えば func(x) + (y + z) は y + z の計算が func(x) より先に行われても問題ないし、それはコンパイラ次第 25:デフォルトの名無しさん 24/08/12 08:16:55.01 +jMHtzbv.net コンパイラのワーニングレベルを上げると警告を出してくれると思うので、有効にすると良いと思う 慣れてる人でも「これはこの動作になるはず」と思い込んでバグに繋がることはあるし、しかもこの手のものは原因を見つけづらいので 26:デフォルトの名無しさん 24/08/12 08:29:35.82 +jMHtzbv.net b= func(a) + a++; なんかも危ない 見かけ上多くの人はfuncの引数は加算前のaだと思い込むし、 b = a++ + func(a); はその逆だと思うけど、実はどちらも保証されてない 逆に論理演算は短絡評価される規定がある z = x && y; は x が FALSEの時点で全体の決まるので、その場合にyは評価されないことが規定されている z = x != NULL && func(*x); が安全なのもこれが理由 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch