質問: true ) ``` で条件分岐させた場合、その後の処理において何か違いがありますか? 個人的には "not equal ~" の方が分かりにくいけど、記法としてカッコいいのかなぁ と、ぼんやり考えています。 そうではなく、具体的な違いをご存じでしたらどなたか教えてください。 よろしくお願いいたします。
回答: 質問タグにはありませんが [c](/questions/tagged/c "'c' のタグが付いた質問を表示") / [c++](/questions/tagged/c%2b%2b "'c++' のタグが付いた質問を表示") の場合は `if (flg)` 一択で、次点で `if (flg != FALSE)` そして、絶対に使ってはいけないのが `if (flg == TRUE)` ですね。 [c](/questions/tagged/c "'c' のタグが付いた質問を表示") / [c++](/questions/tagged/c%2b%2b "'c++' のタグが付いた質問を表示") の文法仕様上 * 条件式 ( `a>b` 等) の結果は `false` または `true` ([c++](/questions/tagged/c%2b%2b "'c++' のタグが付いた質問を表示") の場合) * 条件式 ( `a>b` 等) の結果は `0` または `1` ([c](/questions/tagged/c "'c' のタグが付いた質問を表示") の場合) * [c](/questions/tagged/c "'c' のタグが付いた質問を表示") においては `#define FALSE 0` および `#define TRUE 1` が多い * `if` 等の条件判定においては `0` `false` `FALSE` は俗にいう `else` 側 * `if` 等の条件判定においては `0` `false` `FALSE` 以外は俗にいう `then` 側(ここが超重要) となっています。ということは `int flg;` があるとき `if (flg == TRUE)` と書いてしまうと * これは `if (flg == 1)` と置換される * `if (flg)` であれば `flg` の値が `2` でも `-42` でも `then` 側 * `if (flg == 1)` であれば `flg` の値が `1` 以外は `else` 側 となってしまい挙動が変わってしまいます。余計なことを書いたせいで挙動が変わる=バグを引き込んでしまいます。 もし仮に `bool flg;` であったとして `if (flg == true)` と書かなきゃ気が済まない人がいるなら * `if ((flg == true) == true)` と書かないのはなぜ? * `if (((flg == true) == true) == true)` と書かないのはなぜ? * `if ((((flg == true) == true) == true) == true)` 以下略 と話が進んでいくわけで、やっぱり「一番簡単な形式が一番理解しやすい」のであろうと思われます。 んで今どきは `flg` のような * 変な省略形は使ってはいけないので `flag` のほうがまだまし * でも、読んでいてどんな意味かが判別できない変数名はダメ ということになっている、すなわち `bool input_fulfilled;` のようにもっと具体的な名前をつけなさいと言われています。たとえサンプルでも、もうちょっと名前付けを考えたほうがいいでしょう。サンプルであることを明示したいならメタ変数名を使うべきだったかもしれません。