なぜか、if文の判定式内で、変数aと変数bの補数(ビット反転)したものの比較が作動しません。
●if文内のビット反転変数との比較
// うまく働かない if(a == ~b) {... // OK c = ~b; if(a == c) {...
“a”, “b”,”c” はunsigned char型の変数です。一旦、他の変数へビット反転したものを代入し、その変数と比較すれば、ちゃんと動きます。なぜでしょう。これがうまく動かなくて、のべ半日費やしてしまいました。
演算子の優先順位の問題かな?”if(a == (~b))”とすると動くのかもしれませんが、めんどくさいので試してません。
●switch-case文の式の値をcase文内で++演算子などで更新できない
ついでに、これはほかのCコンパイラでもあったので、仕様的なものかもしれませんが、うまく動くときもあるので、うっかり使ってしまいます。次のような構文はcase文の中でaの値を++演算子で+1していますが、これがうまく更新されないことがあります。
switch(a) { case 1: a++; break; case 2: a++; break; default: braek; }
こうやればうまく動きます。
switch(a) { case 1: a = 2; break; case 2: b = 3; break; default: braek; }
定数で代入するしかだめみたいです。昔から他のCコンパイラでも経験しているので、多分、C言語の仕様的なものなんでしょう。