2010-05-24 43 views

回答

1

是的,它是有效的;在編譯器甚至讀取代碼之前發生宏擴展。主要限制是不能在預處理器指令中嵌入預處理器指令。因此,舉例來說:

// This is ok: 
#define PREFIX(X) this_name_is_prefixed_ ## X 
// ... 
- (void) PREFIX(doSomething):id; 
// ... 

// But this isn't: 
#define IMPORT(X) #import X 
IMPORT(<Foundation/Foundation.h>) // <= Don't expect this to work 

隨着「#進口」指令外,Objective-C的預處理器基本上是一樣的C preprocessor。 (「#import」類似於「#include」,不同之處在於#import意味着只包含一次,所以只包含#import的頭文件不需要預處理器保護)。

1

沒有什麼可以阻止這種情況。它甚至是常用的(儘管我不知道用於iPhone),例如,在設備驅動程序實現中。在這種情況下,宏將用於生成樣板代碼,並且爲了與此代碼進行通信,您必須猜測正確的函數名稱(不建議),或者使用生成宏,例如USB_ATTACH(uthum)來生成爲uthum驅動程序附加方法。

相關問題