1

使いたいです

#define IS_APP_FULL_VERSION NO

そしてコード

isAppFullVersion = IS_APP_FULL_VERSION;

インスタンス変数を設定します。しかし、行う方法もありますか

#if IS_APP_FULL_VERSION == "NO"

// add some methods here

#endif

しかし、それはコンパイルエラーを引き起こします#if (IS_APP_FULL_VERSION == "NO"). と に対してチェックする方法はありYESますNOか?(置換値と照合)


更新:次>のように思わ== 0れ、許可されています

#if IS_APP_FULL_VERSION == 0

したがって、実際には false と true に対して and を使用0し、テストに使用できますが、 andを使用できるとより良いでしょう。1== 1YESNO


更新 2:

考えられる解決策の 1 つが次のとおりです。

#define IS_APP_FULL_VERSION  1

#if IS_APP_FULL_VERSION

// add some methods here

#endif

isAppFullVersion = IS_APP_FULL_VERSION;

すべて機能し、コードを切り替えるために変更1するだけです。0

4

3 に答える 3

1

あなたの基本的な問題は、マクロ プロセッサの #if ステートメントに 1 つのデータ型 (整数) しかないことです。すべての #if 式は整数で評価され、未定義のシンボルはゼロに置き換えられます。文字列式 (比較を含む) は評価できません。

于 2012-08-17T02:35:45.747 に答える
0

実際には、通常、ここには 2 つのケースしかないため、値マクロではなくフラグ マクロを使用します。

#define APP_IS_FULL_VERSION

そのマクロを定義するか定義しないかのどちらかです。その後、後でそれに基づいてコードを含めたり除外したりする場合は、次を使用できます。

#ifdef APP_IS_FULL_VERSION
    // Do something
#endif

(または#ifndef明らかに逆の場合)。

コード セグメントの場合、それを使用して正しいコードを選択するのは簡単です。

#ifdef APP_IS_FULL_VERSION
    isAppFullVersion = YES;
#else
    isAppFullVersion = NO;
#endif
于 2012-08-17T02:00:20.693 に答える
0

あなたは混乱した比較マクロだと思います。

#define形式はそれに準じます。

#define MACRO_NAME VALUEVALUE空白でも結構です。MACRO_NAME必要です。)

コンパイル時の比較が必要な場合は、次のようにします。これは比較平均のみdefinedvsno definedです。YES対ではないNO

#define IS_APP_FULL_VERSION 1

#if defined IS_APP_FULL_VERSION
    NSLog(@"full-verison");
#endif

#define IS_APP_FULL_VERSION blahblah

#if defined IS_APP_FULL_VERSION
        NSLog(@"full-verison");
#endif

の別々のバージョンをビルドしたい場合。以下のように参照してください。

#define IS_APP_FREE_VERSION

#if defined IS_APP_FREE_VERSION
     NSLog(@"free-version");
#endif

#define IS_APP_FULL_VERSION

#if defined IS_APP_FULL_VERISON
     NSLog(@"full-version");
#endif


比較ランタイムが必要な場合は、次のようにします。これは通常の比較です。

#define IS_APP_FULL_VERSION 1    

if(IS_APP_FULL_VERSION)
{
    NSLog(@"full-verison");
}

#define IS_APP_FULL_VERSION 0    

if(!IS_APP_FULL_VERSION)
{
    NSLog(@"no full-version");
}
于 2012-08-17T02:05:39.993 に答える