質問: ++a) { printf("equal\n"); }else{ printf("not equal\n"); } ``` 実行結果 equal
回答: Javaは仕様で左辺を評価してから右辺を評価する、と決まっていたはずです。 よって常に`a == ++a`はaとそれよりも1大きい値と比較されるので偽です。 一方Cはどちらの評価が先かは未定義であったと思います。 左辺が先であればJavaと同じになりますし、右辺が先に評価された場合は`a == ++a`はaをインクリメントしてからその値自身と比較するので常に真となります。 実際gccでコンパイルしたところ、結果は`not equal`となり、他の手軽なWebサイト上のインタープリターでやってみたところ`equal`と異なる結果となりました。 (根拠となる仕様の参照先とかは、Cの方はどなたかフォローしてくれると嬉しいです)