どれだけ自分の使っている言語に詳しいか

ちょっとマニアックでどうでもよいC言語ネタです。
タイトルはあまり関係ありません・・・

私がよく使うC言語では、


n = 1;
printf("n=%d\n", n = n + n++ + n);
printf("n=%d\n", n);
などという、怪しいコードを書くと通常(いろいろなコンパイラがあるため)は、
3と4という結果になります。

n++ の優先度が一番高いのですが、ポストインクリメントなので式全体の評価が完了した後にインクリメントされます。
そのため、1回目のprintf()では、1 + 1 + 1の実行結果が返され、
2回目のprintf()では 1 + 1 + 1の結果をインクリメントした4になるのです。

続きを読む