2

clang と gcc には、未定義のメッセージをオブジェクトに送信することに関する警告を抑制するオプションがありますか? もしそうなら、フラグは何ですか?

clang 3.1 の場合:

test.mm:51:14: warning: instance method '-dfs_path:' not found (return type defaults to 'id')
            ([pathfinder dfs_path: graph, @[ NUM(start) ], NUM(goal), NUM(max_steps)])
            ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

gcc 4.2.1 の場合:

test.mm: In function ‘void test_path(objc_object*, objc_object*, int, int, int, BOOL)’:
test.mm:84: warning: no ‘-dfs_path:’ method found
test.mm:84: warning: (Messages without a matching method signature
test.mm:84: warning: will be assumed to return ‘id’ and accept
test.mm:84: warning: ‘...’ as arguments.)
test.mm:84: warning: no ‘-dfs_path:’ method found

基本的に、問題のメソッドは MacRuby で生成されるため、Objective C コンパイラはコンパイル時にそれらについて知りません。

4

2 に答える 2

2

Xcode の clang からの私の警告のほとんどは、警告メッセージ自体にその特定の警告への対処に関する情報が表示されます。手動で clang を実行している場合 (またはこれらが表示されない場合)、この動作をオンにする clang のオプションがあります。

-f[no-]diagnostics-show-option

コンパイラ オプションとして使用する-fdiagnostics-show-optionと、次のようなオプションが警告に表示されます。

foo.m:73:1: warning: category is implementing a method which will also be implemented by its
            primary class [-Wobjc-protocol-method-implementation]

これは、-Wobjc-protocol-method-implementationオプションがエラーの原因であり、追加-Wno-objc-protocol-method-implementationすると通常は無効になることを示しています。

そうは言っても、未定義のメソッドの警告をオフにしないことをお勧めします。メソッドの定義は、コンパイラが戻り値を処理する方法に影響を与えるため、後で多くの頭痛の種になる可能性があります。

適切なインクルード ファイルがない場合は、カテゴリを使用してメソッドのローカル定義をいつでも宣言できます。最もクリーンな方法 (宣言を含む) ではありませんが、必要な場合もあります。

@interface class_you_are_having_issues_with ()
- (id)dfs_path: (id)unknownarg, ...
@end

余談ですが、Objective-C でコンマ区切りの引数を使用するのはこのときだけなので、これは可変引数メソッドだと思います。

うまくいけば、これは両方の面で正しい方向にあなたを指し示します.

于 2012-05-06T18:08:57.077 に答える
0

試してみてください-Wno-objc-method-access-clangで動作します。

于 2015-12-02T12:50:49.140 に答える