43

IPAD_BUILD や IPHONE_BUILD などのビルド設定でプリプロセッサ マクロを定義する方法 (およびファクトリ メソッドでそれらを使用する方法) は?

私は今これらを暗記して使用していますが、背後にあるものを知るのはクールです.

4

2 に答える 2

56

/#if 次の場合は通常どおり動作します。

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200
  if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    return YES;
  }
#endif
  return NO;
}

/#ifdef は、「定義されている場合 - いくつかの値またはマクロ」を意味します。

#ifdef    RKL_APPEND_TO_ICU_FUNCTIONS
#define RKL_ICU_FUNCTION_APPEND(x) _RKL_CONCAT(x, RKL_APPEND_TO_ICU_FUNCTIONS)
#else  // RKL_APPEND_TO_ICU_FUNCTIONS
#define RKL_ICU_FUNCTION_APPEND(x) x
#endif // RKL_APPEND_TO_ICU_FUNCTIONS

また:

#ifdef __OBJC__
    #import <Foundation/Foundation.h>
#endif

詳細については、このリンクを使用してください http://www.techotopia.com/index.php/Using_Objective-C_Preprocessor_Directives

iPad を実行しているかどうかをテストするには、次のようにする必要があります。

#define USING_IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad

if (USING_IPAD) {
    NSLog(@"running iPad");
}

別の便利なプリプロセッサ関数を次に示します。

#ifdef DEBUG
    //here we run application through xcode (either simulator or device). You usually place some test code here (e.g. hardcoded login-passwords)
#else
    //this is a real application downloaded from appStore
#endif
于 2012-10-08T13:05:25.623 に答える
12

マクロは、未定義にすることも、値なしで定義することも、何らかの値 (場合によっては数値) で定義することもできます。例:

#undef MACRO
#define MACRO
#define MACRO ??????
#define MACRO 0
#define MACRO 1

#ifdef MACRO または #if defined (MACRO) は、値の有無にかかわらず、マクロが定義されているかどうかをチェックします。

#if MACRO はマクロ定義を置き換えます。マクロが定義されていない場合は、0 を代入します。次に、見つかった式を評価します。上記の 5 つの例を見ると、#if MACRO は次のようになります。

#if 0
#if
#if ??????
#if 0
#if 1

番号 2 と 3 は、コンパイル時エラーを示します。1 番と 4 番は false と評価されるため、次のコードはスキップされます。数値 5 は true と評価されます。

#if はより柔軟です: 次のように書くことができます

#if MACRO == 2

マクロがたとえば次のように定義されている場合にのみ、次のコードをコンパイルします

#define MACRO 2
于 2014-03-06T09:30:03.490 に答える