C言語を学びたいんやが、まず何からやればいい?at TECHC言語を学びたいんやが、まず何からやればいい? - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト23:デフォルトの名無しさん 24/08/12 01:43:13.33 2lKM0Yyl.net int a = 1; int b = a+a++; printf("a=%d, b=%d\n", a,b); これなんでbが3になるの? 高知インクリメントってその行が終わってから発動すんじゃなかったん? 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 コンパイラのワーニングレベルを上げると警告を出してくれると思うので、有効にすると良いと思う 慣れてる人でも「これはこの動作になるはず」と思い込んでバグに繋がることはあるし、しかもこの手のものは原因を見つけづらいので 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch