Xcodeで警告を抑制する方法はありますか?
たとえば、文書化されていないメソッドを呼び出していますが、メソッドがヘッダーにないため、コンパイル時に警告が表示されます。ヘッダーに追加して警告を停止できることはわかっていますが、ヘッダーに追加する以外に (ヘッダーをクリーンで標準に保つことができるように) 警告を抑制する方法があるかどうか疑問に思っていますか? プラグマか何か?
Xcodeで警告を抑制する方法はありますか?
たとえば、文書化されていないメソッドを呼び出していますが、メソッドがヘッダーにないため、コンパイル時に警告が表示されます。ヘッダーに追加して警告を停止できることはわかっていますが、ヘッダーに追加する以外に (ヘッダーをクリーンで標準に保つことができるように) 警告を抑制する方法があるかどうか疑問に思っていますか? プラグマか何か?
Xcode 3 と llvm-gcc-4.2 を使用して、ファイルごとに警告を無効にするには、次を使用できます。
#pragma GCC diagnostic ignored "-Wwarning-flag"
警告名は gcc 警告フラグです。
これにより、コマンド ラインの警告フラグが上書きされます。ただし、すべての警告で機能するわけではありません。-fdiagnostics-show-option を CFLAGS に追加すると、その警告を無効にするために使用できるフラグを確認できます。
未使用変数の警告を抑制する簡単な方法があります。
#pragma unused(varname)
編集: ソース: http://www.cocoadev.com/index.pl?XCodePragmas
更新:新しい解決策、より堅牢な解決策に出会いました
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
個々のファイルの警告を抑制するには、次の手順を実行します。
xcodeプロジェクトでファイルを選択します。get infoを押して、ビルドオプションのあるページに移動し、-Wno-と入力して、警告を無効にします。
-いいえ-
例えば
-Wno-unused-parameter
プロジェクト設定を確認すると、ビルドタブページの下部にあるGCC警告を確認すると、警告の名前を取得できます。各警告をクリックすると、警告パラメーター名が表示されます。
例えば
関数パラメーターが宣言以外に使用されていない場合は常に警告します。[GCC_WARN_UNUSED_PARAMETER、-Wunused-parameter]
警告を取り除くには:問題のオブジェクトのカテゴリインターフェイスを作成してみてください
@interface NSTheClass (MyUndocumentedMethodsForNSTheClass)
-(id)theUndocumentedMethod;
@end
...
@implementation myClass : mySuperclass
-(void) myMethod {
...
[theObject theUndocumentedMethod];
...
}
余談ですが、出荷コードで文書化されていないメソッドを呼び出さないことを強くお勧めします。インターフェースは変更される可能性があり、変更される可能性があり、それはあなたの責任です。
http://nshipster.com/pragma/#inhibiting-warnings - 警告の禁止セクションにスキップ
Objective-C では、重大なエラーの多くは警告としてのみ表示されます。警告を決して無効にしないだけでなく、通常は「警告をエラーとして扱う」(-Werror) をオンにします。
コード内のすべての種類の警告は、正しく処理する (通常はオブジェクトを正しい型にキャストする) か、必要なときにプロトタイプを宣言することで回避できます。
「Undocumented.h」という新しい別のヘッダー ファイルを作成し、プロジェクトに追加します。次に、ドキュメント化されていない関数を呼び出すクラスごとに 1 つのインターフェイス ブロックを作成し、それぞれに「(ドキュメント化されていない)」のカテゴリを指定します。次に、その 1 つのヘッダー ファイルを PCH に含めるだけです。こうすることで、元のヘッダー ファイルはクリーンなままになり、維持するファイルが 1 つだけになり、PCH の 1 行をコメント アウトして、すべての警告を再び有効にすることができます。
このメソッドは、「(Depreciated)」カテゴリの「Depreciated.h」の減価償却された関数にも使用します。
最良の部分は、個々のプロトタイプにコメントを付けたりコメントを外したりすることで、個々の警告を選択的に有効/無効にできることです。
その特定の警告を抑制することは安全ではありません。コンパイラは、引数の型を認識し、メソッドに戻って正しいコードを生成する必要があります。
たとえば、このようなメソッドを呼び出している場合
[foo doSomethingWithFloat:1.0];
が float を取り、プロトタイプが表示されない場合、コンパイラは、メソッドが float ではなく double を取ると推測します。これにより、クラッシュや誤って解釈された値が発生する可能性があります。上記の例では、Intel マシンのようなリトル エンディアン マシンでは、レシーバー メソッドは 1 ではなく 0 が渡されたことを認識します。
i386 ABI docsで理由を読むか、警告を修正するだけです。:-)