12

最新のxCode4.41に更新したばかりですが、完全に細かいコードについて大量の警告が表示されます(件名を参照)。これらの警告は、私が使用しているサードパーティのソースコードに含まれています。そのコードにアクセスして編集する気がないので(次にそのコードを更新するときにもう一度実行する必要があります)、無効にするだけです。特定の警告。

ちなみに、私はxcode4.41を使用していますが、新しいタグを作成できるほどの評判がないようです(4.41はまだ存在していませんが興味深いです)

4

5 に答える 5

21

これは私のために働いた:

#ifdef __llvm__
#pragma GCC diagnostic ignored "-Wdangling-else"
#endif
于 2012-08-23T19:34:05.310 に答える
6

それはバグではありません。Apple LLVMは、ネストされたif-elseif-elseブロックがある場合に警告します。以下のコードを見てください。

if (Condition1)
    if (Condition2)
        return Statement2;
    else if (Condition3)
        Statement3;
    else
        Statement4;

上記のコードを見ると、パーサーが「if」「else」がどの「if」に接続されているかを理解するのが混乱しますか?else-ifごとにelseを設定することは必須ではないため、elseステートメントがif(Condition2)ではなくif(Condition1)にリンクされている可能性が非常に高いことを覚えておいてください。

Apple llvmコンパイラは、これを馬鹿にしないほど賢いですが、ユーザーがコードを再考して、ユーザーが他の方法でそれを望まないことを確認するように警告します。

通常、警告は、すべての最上位のifステートメントに中括弧を追加することで解決できます。上記の例では、if(Condition1)に中括弧を追加することで警告が消えます。以下のより読みやすい(警告が少ない)コードを確認してください。

if (Condition1)
{
    if (Condition2)
        return Statement2;
    else if (Condition3)
        Statement3;
    else
        Statement4;
}
于 2013-10-21T08:41:53.323 に答える
3

OK ---AppleLLVMコンパイラ4.0にはオプションがあります-警告が呼び出されました

中括弧と括弧がありません

これをNOに設定すると、この警告がなくなります。

残念ながら、中括弧の警告を取り除く方法はないようです。

アップル、あなたは私がどのように開発するかについてあまりにも多くを課し始めています。止まる!

于 2012-08-19T02:05:12.600 に答える
0

「その他」の「if」を意味する「else」は、本当に見つけにくいバグです。私は個人的な経験から知っています。したがって、「ぶら下がっている他の」警告は非常に役立ちます。

于 2016-09-20T09:09:01.953 に答える
0

-Wno-dangling-elseフラグを使用することもできます。

http://clang.llvm.org/docs/UsersManual.html#options-to-control-error-and-warning-messages

-Wno-foo
        警告「foo」を無効にします。

clang++ -Wno-dangling-else test.cpp
于 2016-12-13T20:03:46.323 に答える