ネタ元
int i = 1;
int j = 0;
Function((j = i) == i);
※C#でのvarに相当するautoを実装したコンパイラが手元になかったのとコンパイル結果をわかりやすくするためにCで書きました
こんなソースコードを
gcc -O3
で最適化付きでコンパイルするとこんなコードになります(GCC 4.3.2 on Debian 5.0 AMD64)。
func:
.LFB2:
movl $1, %edi
xorl %eax, %eax
jmp Function
変数なんてありゃしない。比較だってありゃしない。
だってコンパイル時に結果はわかっているんだから。
C#版でリリース版(って最適化かかってるんですよね?)でもceqって比較命令が何故出ていたのか謎。