web-dev-qa-db-ja.com

LLVM / Clangを使用して特定のファイルのすべての警告を無視する

私のiOSプロジェクトにはいくつかの警告があるファイルがありますが、それらの警告は無視したいです。プロジェクト全体で警告を無効にしたくはありません(その方法を知っている)、特定のファイルだけを無効にします。だから、特定のファイルからのすべての警告を完全に無視する方法はありますか?

Xcode 4.2でLLVM 3.0とClangを使用しています。

68
bobbypage

単にclangを使用している場合は、維持するソースにプラグマ構文を使用する必要があります(プログラムを適切に変更して警告を削除することは不可能であると想定)。

構文は次のとおりです:

#pragma clang diagnostic Push
#pragma clang diagnostic ignored "-Wmultichar"

char b = 'df'; // no warning.

#pragma clang diagnostic pop

これらが変更できず、維持できないプログラムである場合は、すべてではなく、ファイルに対して無効にする警告を指定する必要があります。すべてを無効にするには、ファイルごとの引数-wを追加できます。ソースが変更され、いくつかの警告は異なるビルド設定で適用されます(または適用されません)。 clangのメッセージは、生成された警告に相当するフラグを教えてくれます。

Xcodeを使用してファイルのビルドフラグを変更するには:

  • ターゲットを選択
  • ビルドフェーズを選択する
  • 「ソースのコンパイル」フェーズで引数を変更するファイルを見つけます
  • [コンパイラフラグ]セルをダブルクリックして編集します
63
justin

私は多くの320コードを含むプロジェクトを継承し、そのコードベースはいくつかの警告と静的アナライザーエラーを投げました。近い将来プロジェクトからそのコードを削除するので、修正に興味はありませんでした。

次のコンパイラフラグを含めることにより、特定のファイルの静的アナライザー警告を無効にできます。

-Xanalyzer -analyzer-disable-all-checks

これを-wと組み合わせて、そのファイルの警告も無効にすることができます。これにより、そのコードベースで生成される30ほどの警告に悩まされることなく、新しい開発を進めることができました。

上記の手順を使用:Xcodeを使用してファイルのビルドフラグを変更するには:

  1. ターゲットを選択
  2. ビルドフェーズを選択する
  3. 「ソースのコンパイル」フェーズで引数を変更するファイルを見つけます
  4. [コンパイラフラグ]セルをダブルクリックして編集します
  5. 「-w -Xanalyzer -analyzer-disable-all-checks」を追加して、警告およびclang警告を抑制します
92
kcharwood

ジャスティンの答えの助けを借りて、これがあなたのやり方です

1.警告の名前を見つけます。

私の場合、conversion

enter image description here

2.ファイルごとのコンパイラフラグビルドフェーズを追加する

フィルターを使用して、コンパイルソースでファイルの名前を見つけ、-Wno-[error name]-Wno-conversion

enter image description here

21
Robert

特定のターゲット->ビルド設定を選択し、すべての警告を禁止を検索してYESに設定できます。これにより、このターゲットの警告が無効になります。これは、JSONKitのようなコードをココアポッドで使用し、コンパイラが警告についてどのように叫ぶかを見たくない場合に便利です:)

2
dormitkon