2006/4/21 Fri

誤解

Filed under: 雑記 — nico @ 13:33:19

自分でエキスパートだなぁ・・・と思ってはいても、どーにも色々誤解や勘違いして覚えてる事ってのはあるもんで、反省の意味もこめて記述。

いや、先日コードレビューで間違った指摘しちゃったので・・・ね(汗)

で、何を誤解してたのかっつーと、C言語における演算子の実行順序について。

C言語の演算子って実行順序は保証されないって覚えてました。
確かに、大多数の演算子は保証されてない。
+とか-とか、そんなの。

つまり、このコードの結果は保証されない、と。

void foo(int* a)
{
  *a += 1;
  *a *= 2;
}
void bar(int *a)
{
  *a += 2;
  *a *= 2;
}
int main()
{
  int n = 10;
  int res;
  res = foo(&n) + bar(&n);
  return 0;
}

このコードの場合、fooが先に実行されるか、barが実行されるかによって結果が変わる(foo先なら48、barが先なら50)。

で、この意識ばかりが先にあって、「&&」、「||」、「,」の3つの演算子に関しては、必ず左から右の順番に解決されるって例外をスルーしてきてました・・・orz
ってことで、こーゆー記述の動作は保証される・・・と。

  if ((ptr!=NULL)&&(ptr->xxx==yyy))

はうー、一から入門書読んで勉強しなおそうかな・・・(を

コメント (0) »

この記事にはまだコメントがついていません。

コメント RSS トラックバック URL

コメントをどうぞ

Link Free. Copyright (C) 2005-2007 nico. All rights reserved.
HTML convert time: 0.482 sec. Powered by WordPress ME