125

Xcodeで警告を抑制する方法はありますか?

たとえば、文書化されていないメソッドを呼び出していますが、メソッドがヘッダーにないため、コンパイル時に警告が表示されます。ヘッダーに追加して警告を停止できることはわかっていますが、ヘッダーに追加する以外に (ヘッダーをクリーンで標準に保つことができるように) 警告を抑制する方法があるかどうか疑問に思っていますか? プラグマか何か?

4

9 に答える 9

147

Xcode 3 と llvm-gcc-4.2 を使用して、ファイルごとに警告を無効にするには、次を使用できます。

#pragma GCC diagnostic ignored "-Wwarning-flag"

警告名は gcc 警告フラグです。

これにより、コマンド ラインの警告フラグが上書きされます。ただし、すべての警告で機能するわけではありません。-fdiagnostics-show-option を CFLAGS に追加すると、その警告を無効にするために使用できるフラグを確認できます。

于 2008-10-13T05:28:52.843 に答える
50

未使用変数の警告を抑制する簡単な方法があります。

#pragma unused(varname)

編集: ソース: http://www.cocoadev.com/index.pl?XCodePragmas

更新:新しい解決策、より堅牢な解決策に出会いました

  1. [プロジェクト] > [アクティブ ターゲットの編集] > [ビルド] タブを開きます。
  2. User-Defined: 検索 (見つからない場合は作成) キー :GCC_WARN_UNUSED_VARIABLEに設定しNOます。

EDIT-2 例:

BOOL ok = YES;
NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self);

コンパイラは、未使用の変数の警告を表示しokます。

解決:

BOOL ok = YES;
#pragma unused(ok)
NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self);

PS: 他の警告を設定/リセットすることもできます: GCC_WARN_ABOUT_RETURN_TYPE:YES/NO

于 2011-11-03T09:13:44.813 に答える
27

個々のファイルの警告を抑制するには、次の手順を実行します。

xcodeプロジェクトでファイルを選択します。get infoを押して、ビルドオプションのあるページに移動し、-Wno-と入力して、警告を無効にします。

-いいえ-

例えば

-Wno-unused-parameter

プロジェクト設定を確認すると、ビルドタブページの下部にあるGCC警告を確認すると、警告の名前を取得できます。各警告をクリックすると、警告パラメーター名が表示されます。

例えば

関数パラメーターが宣言以外に使用されていない場合は常に警告します。[GCC_WARN_UNUSED_PARAMETER、-Wunused-parameter]

于 2010-10-19T01:05:48.910 に答える
5

警告を取り除くには:問題のオブジェクトのカテゴリインターフェイスを作成してみてください

@interface NSTheClass (MyUndocumentedMethodsForNSTheClass)

-(id)theUndocumentedMethod;
@end
...

@implementation myClass : mySuperclass

-(void) myMethod {
...
   [theObject theUndocumentedMethod];
...
}

余談ですが、出荷コードで文書化されていないメソッドを呼び出さないことを強くお勧めします。インターフェースは変更される可能性があり、変更される可能性があり、それはあなたの責任です。

于 2009-09-26T00:10:13.327 に答える
5

http://nshipster.com/pragma/#inhibiting-warnings - 警告の禁止セクションにスキップ

于 2013-07-05T16:09:29.773 に答える
5

Objective-C では、重大なエラーの多くは警告としてのみ表示されます。警告を決して無効にしないだけでなく、通常は「警告をエラーとして扱う」(-Werror) をオンにします。

コード内のすべての種類の警告は、正しく処理する (通常はオブジェクトを正しい型にキャストする) か、必要なときにプロトタイプを宣言することで回避できます。

于 2008-11-10T06:57:05.700 に答える
3

「Undocumented.h」という新しい別のヘッダー ファイルを作成し、プロジェクトに追加します。次に、ドキュメント化されていない関数を呼び出すクラスごとに 1 つのインターフェイス ブロックを作成し、それぞれに「(ドキュメント化されていない)」のカテゴリを指定します。次に、その 1 つのヘッダー ファイルを PCH に含めるだけです。こうすることで、元のヘッダー ファイルはクリーンなままになり、維持するファイルが 1 つだけになり、PCH の 1 行をコメント アウトして、すべての警告を再び有効にすることができます。

このメソッドは、「(Depreciated)」カテゴリの「Depreciated.h」の減価償却された関数にも使用します。

最良の部分は、個々のプロトタイプにコメントを付けたりコメントを外したりすることで、個々の警告を選択的に有効/無効にできることです。

于 2010-06-13T07:29:07.097 に答える
1

その特定の警告を抑制することは安全ではありません。コンパイラは、引数の型を認識し、メソッドに戻って正しいコードを生成する必要があります。

たとえば、このようなメソッドを呼び出している場合

[foo doSomethingWithFloat:1.0];

が float を取り、プロトタイプが表示されない場合、コンパイラは、メソッドが float ではなく double を取ると推測します。これにより、クラッシュや誤って解釈された値が発生する可能性があります。上記の例では、Intel マシンのようなリトル エンディアン マシンでは、レシーバー メソッドは 1 ではなく 0 が渡されたことを認識します。

i386 ABI docsで理由を読むか、警告を修正するだけです。:-)

于 2008-10-15T07:07:44.233 に答える