条件式内での代入

int errcode=10;
if( errcode=0 ){
  printf("FALSEn");
}
printf("%dn",errcode);

上記の式を実行すると、0が出力される(FALSEは出力されない)。
つまり、代入処理が終わってから条件判定をしている。
(演算子の優先順位的には判定してから、代入しているという可能性もあるな・・・)
左辺のerrcodeの値と、右辺の0のどちらの値で判定しているのかは、謎。
優先順位をもっと勉強した方がいいかも。
コンパイラさんいわく、式の結果で真偽値を判定する場合は()で囲むのがおすすめらしい。

int errcode=10;
if( (errcode=0) ){
  printf("FALSEn");
}
printf("%dn",errcode);

の方がいいってことらしい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です