アセンブラになったら

つぎのプログラムをコンパイルして実行するとどうなりますか?

#include 
int test(int a, int b, int c)
{

  std::cout << "a = " << a << std::endl;
  std::cout << "b = " << b << std::endl;
  std::cout << "c = " << c << std::endl;
  return 0;
}

int main(void)
{
  int tmp = 0;
  test(tmp++, tmp++, tmp);
  return 0;
}

gccコンパイルして、a.outやってみる。

さて出力結果は

a = 1
b = 0
c = 2

これは予想通り?

僕は予想どおりではない…。

アセンブラみると、test関数に渡す引数をスタックにつめるのとインクリメントするという処理が、僕の予想とは異なっていた。


ってことで、教訓。

あんまりこったことしない。

やるならアルゴリズムで!