Xcodeで警告を抑制する方法はありますか?
たとえば、文書化されていないメソッドを呼び出していますが、メソッドがヘッダーにないため、コンパイル時に警告が表示されます。私はそれをヘッダーに追加して警告を停止できることを知っていますが、ヘッダーに追加する以外の方法があるのではないかと思っています(そのため、ヘッダーをクリーンで標準に保つことができます)?プラグマか何か?
Xcode 3およびllvm-gcc-4.2を使用して、ファイルごとに警告を無効にするには、次を使用できます。
#pragma GCC diagnostic ignored "-Wwarning-flag"
警告名はgcc警告フラグです。
これにより、コマンドラインの警告フラグが上書きされます。ただし、すべての警告が機能するわけではありません。 CFLAGSに-fdiagnostics-show-optionを追加すると、その警告を無効にするために使用できるフラグを確認できます。
未使用の変数警告を抑制する簡単な方法があります:
#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
#pragma GCC diagnostic Push
#pragma GCC diagnostic ignored "-Wshadow-ivar"
// your code
#pragma GCC diagnostic pop
GCCプラグマはこちら について学習し、警告の警告コードを取得するには、レポートナビゲーター(Command + 9)に移動し、最上位のビルドを選択し、ログを展開します(上の「=」ボタン右)、一番下までスクロールすると、警告コードがこのような角括弧内にあります[-Wshadow-ivar]
#pragma clang diagnostic Push
#pragma clang diagnostic ignored "-Wshadow-ivar"
// your code
#pragma clang diagnostic pop
個々のファイルの警告を抑制するには、次の手順を実行します。
xcodeプロジェクトでファイルを選択します。 [情報を取得]を押して、ビルドオプションを含むページに移動し、-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では、多くの重大なエラーが警告としてのみ表示されます。 never警告を無効にするだけでなく、通常は「警告をエラーとして扱う」(-Werror)をオンにします。
コード内のあらゆるタイプの警告は、物事を正しく行うことによって(通常はオブジェクトを正しいタイプにキャストすることによって)、または必要なときにプロトタイプを宣言することによって回避できます。
「Undocumented.h」という新しい別個のヘッダーファイルを作成し、プロジェクトに追加します。次に、ドキュメント化されていない関数を呼び出すクラスごとに1つのインターフェイスブロックを作成し、それぞれに '(Undocumented)'のカテゴリを与えます。次に、その1つのヘッダーファイルをPCHに含めます。このようにして、元のヘッダーファイルはクリーンなままで、他に保持するファイルは1つだけです。PCHの1行をコメント化して、すべての警告を再度有効にすることができます。
また、このメソッドは、「(Depreciated)」カテゴリの「Depreciated.h」の減価償却関数にも使用します。
最良の部分は、個々のプロトタイプをコメント化またはコメント解除することにより、個々の警告を選択的に有効化/無効化できることです。
その特定の警告を抑制することは安全ではありません。コンパイラーは、引数のタイプを認識し、メソッドに戻って正しいコードを生成する必要があります。
たとえば、次のようなメソッドを呼び出す場合
[foo doSomethingWithFloat:1.0];
これはフロートを受け取り、プロトタイプが表示されない場合、コンパイラはメソッドがフロートではなくダブルを受け取ると推測します。これにより、クラッシュが発生し、値が誤って解釈される可能性があります。上記の例では、Intelマシンのようなリトルエンディアンマシンでは、レシーバーメソッドは1ではなく0を渡します。
i386 ABI docs でその理由を読むか、警告を修正することができます。 :-)