どうやら、gcc/Cでは、コンパイラは
if ((x=0)){ some code }
使用されますが、
if (x=0){ some code }
が使用されると、コンパイラはコンパイルを拒否します。
2つの違いは何ですか?
注として、x==0
とx=0
の違いは何ですか。私は、いくつかの奇妙なコードに遭遇したときのCの動作を調査しています。
コード的には違いはありません。
起こっているのはx=0
の代わりに x==0
は、よくある間違いであり、ほとんどのコンパイラは、それを見つけたときに警告(または、エラー)を出します。括弧の追加セットは、コンパイラーをシャットダウンするための一般的なトリックです-「はい、私は本当にこれを行うつもりでした」と同等です。
_-Werror
_がない限り、コードはコンパイルを「拒否」すべきではありません。警告を有効にしている場合は、次のように表示されます。
警告:真偽値として使用される割り当ての前後に括弧を提案します[-Wparentheses]
while (*dest++ = *src++)
具体的には、 GCC docs は警告の目的について次のように述べています。
真理値が期待されるコンテキストで代入がある場合や、優先順位がよく混乱する演算子がネストされている場合など、特定のコンテキストで括弧が省略されている場合に警告します。