4

Xcode ドキュメントから:

構文の強調表示、コード補完、およびその他すべてのインデックス駆動型機能は、LLVM パーサーによって処理されます。コンパイラがシンボルを認識している場合、Xcode IDE も認識しています。

しかし、プリプロセッサ ディレクティブ内でコードを記述する場合、これらの「インデックス駆動型機能」はどれも機能しません。誰かがこれに対する解決策を持っていますか?

例:

未使用パラメーターの警告をオンにしてビルドすると、そのパラメーター使用されている場合でも大量の警告が生成されます。この特定のスクリーンショットのコードは ApplesReachability.mのもので、変更されていません。ここでも構文の強調表示が存在しないことに注意してください。

警告

内部の正しい補完#if

正しいコード補完

しかし、内部の間違った補完#else:

不正なコード補完

半分はローカル変数で動作します:

UIDeviceOrientationIsPortrait マクロでの壊れた解析

しかし、現在のメソッド スコープ外で宣言された何かを呼び出すと、再び壊れます。

UIDeviceOrientationIsPortrait マクロでの壊れた解析

別の例
別の例

これを修正する方法を教えてください

4

3 に答える 3

1

@chown、「コンパイラがシンボルについて知っていれば...ビルド時とまったく同じだ」と思います。コンパイラがコードを解析し、すべてのプリプロセッサの条件に従うことを示します。#ifdefこのような場合、コンパイラは、条件が失敗した場所での変数の使用に気付くことはありません。

これは、「で正常に動作する」理由も説明してい#elseます。

UNUSEDマクロの使用を試みることはできますが、「Unusedvalues」の警告を無効にする必要があります。

#define UNUSED(a) a
...
-(void)test:(id)argument
{
    UNUSED(argument);
#ifdef AAA
    NSLog(@"arg:%@", argument);
#endif    
}
于 2011-11-10T13:19:52.520 に答える
-1

これはバグであり、Xcodeバージョン4.3.1(4E1019)で修正されていることがわかりました。

于 2012-03-29T16:53:57.590 に答える