他の

Mac警告:真理値として使用される代入を括弧で囲むことをお勧めします

NS

ルブレサハ

オリジナルポスター
2008年12月22日
  • 2009年1月8日
やあ
このコードスニペットを使用しています

void * handle_;

if(handle_ = dlopen( '/ System / Library / Frameworks / DiskArbitration.Framework / Versions / A / DiskArbitration'、RTLD_NOW))
{{
printf( '............');

}
else if(handle_ = dlopen( '/ System / Library / PrivateFrameworks / DiskArbitration.Framework / Versions / A / DiskArbitration'、RTLD_NOW))
{{
printf( '.................');
}

しかし、私は警告を受けています:
最初の行の「真理値として使用される代入の括弧を提案します」、つまり「for」ループ....誰かがこの警告を取り除くのを手伝ってくれますか?

kpua

2006年7月25日


  • 2009年1月8日
まず、if()ステートメントに副作用があるのは一般的に悪い形式です。

ただし、それが意味するものをコーディングする最も簡単な方法である場合もあります(ただし、必ずしもあなたの例にあるとは思いません)。 ifステートメントに割り当てがある場合、GCCは通常次のようなものを期待します。

コード:if ( (foo = bar()) != NULL )
割り当ての周りの余分な括弧に注意してください。 GCCは、次のエラーを回避するために括弧を使用することをお勧めします。

コード:if ( foo = bar() != NULL )
これは、fooに割り当てられた値がNULLに等しいかどうかをチェックせず、ブール値(bar()!= NULL)をfooに割り当てます。

また、明示的なブールチェックをそこに入れるのが通例であり、一般的にはより明確であるため、GCCはこれを期待しています。 NS

サンダー

2008年4月24日
  • 2009年1月9日
それはまた、声明のためです

コード:if (a = b) {...}
は正しいCです(bをaに割り当て、ゼロ以外をチェックします)が、ほとんどの場合、人々は実際に

コード:if (a == b) {...}
if()内の割り当ては例外であるため、GCCはそれに関する警告を発行します。また、あなたのコードの将来の読者のために、余分な括弧は「はい、私は本当にここでの割り当てを意味します」を示します。