e160.c

ビットと関係演算優先順位
#ident	"$Id: e160.c.html 187 2006-05-17 05:23:14Z ono.mki $"
/*###12 [cc] 警告: BBB:e160: α^β==γはα^(β==γ)と(α^β)==γのどちら?%%%*/
/* suggest parentheses around comparison in operand of ^ */

int     c = 2 ;

修正前 if(c ^ 2 == 2) { printf("BUGです") ; }
コンパイラはこう見る if(c ^ (2 == 2)) { printf("コンパイラはこう見ます") ; }
修正例 if((c ^ 2) == 2) { printf("こう書くべきです") ; }

解説 ビット演算『^』と関係演算『==』のどちらが 先に実行されるかわかりますか? 結合力の問題です。 カッコを付けて実行順序を明示的に指定したほうが 良いです。 C-FAQ 3.4J C-FAQ 3.4E を参照して下さい。