41

次のようなプリプロセッサディレクティブの使用方法を理解しています。

#if SOME_VARIABLE
    // Do something
#else
    // Do something else
#endif

しかし、SOME_VARIABLEでない場合にのみ、何かを実行したい場合はどうなりますか。

明らかに、私はまだこれを行うことができました:

#if SOME_VARIABLE

#else
    // Do something else
#endif

。。。空の場合は残しますが、実行する方法はありますか?

#if not SOME_VARIABLE
   // Do something
#endif

ここにあるAppleのドキュメントはそうではないと示唆していますが、これは非常に基本的なニーズのようです。

基本的に、次と同等のプリプロセッサを実行したいと思います。

if(!SOME_VARIABLE)(
{
   // Do Something
}
4

3 に答える 3

86

あなたは試すことができます:

#if !(SOME_VARIABLE)
   // Do something
#endif
于 2012-06-04T11:32:00.443 に答える
22

何かが定義されているかどうかを確認しようとしていますか? はいの場合は、次を試すことができます。

#ifndef SOME_VARIABLE

また

#if !defined(SOME_VARIABLE)

于 2012-06-04T11:47:20.320 に答える
4

Apple のドキュメント ( If - The C Preprocessor ) は正しく、これが C プリプロセッサ ステートメントの黎明期からのやり方です。同じドキュメントに従って、できることは、ゼロまたはゼロ以外の値に評価される式を作成し、それを使用することだけです。

Meccan の回答は、TARGET_IPHONE_SIMULATOR定義どおり、TRUEまたはFALSEプラットフォームに応じて正しいため、式はゼロまたはゼロ以外の金額に評価されます。

一般に、これらのマクロ ( #ifetc) は、シンボルが定義されているかどうかに基づいて、物事を含めたり除外したりするために使用されます。そのユースケースでは、プリプロセッサが持って#ifdefおり、#ifndef歴史的に最も重要なケースとして受け入れられてきたものをカバーしています。

また、これらのステートメントの主語は、( を介して) プリプロセッサで定義された他のシンボルにしかならないことを考えると#define、この制限は合理的です。

于 2012-06-04T11:47:30.330 に答える