C
プログラム設計

【C言語】if文についての考察

OutLine

  • if()とは?
  • コンパイルエラーで見落としを無くす

if()とは?

C言語のif文において、if文の誤解 より、以下のような認識であると思います。

  if( 真または偽 ) {}

しかし、実際は、、、、

  if( 条件式 ){
    //else以外
  } else {
    //0である時
  }

です。

trueが実行される部分は、0以外になります。
つまり、1以上、-1以下になります。

※ただし、Java等はbooleanの判定になるため、マイナスは使用できません。

コンパイルエラーで見落としを無くす

ベテラン社員でも見落とすif文の書き方についてです。

 #define SENSOR_STATUS  1
 int StatusChange = 1;
 if(StatusChange = SENSOR_STATUS){
   //処理
 }

あれ?パッと見、合ってんじゃね?

間違ってますよぉぉぉ。
何が間違っているのか、それはイコール(=)が1つしか無いんです。
よくやる間違いなのですが、これ、コンパイルしても気づかないんですよねー。

推奨する書き方

 #define SENSOR_STATUS  1
 int StatusChange = 1;
 if(SENSOR_STATUS == StatusChange){
   //処理
 }

この書き方の場合、もし、イコール(=)が1つであったとしても、コンパイルエラーとなり、実行する前に気づくことができます。
(VBとかだと、イコール(=)が1つなので注意!!)
定数に代入はできないからね。

参考

https://qiita.com/Ratty27/items/c142412bc6114e2f5c4c