宏还可以生成方法名称吗?

时间:2010-05-24 11:04:20

标签: iphone objective-c macros

通常使用宏来创建方法名称是否有效?我的意思是......实际上它只是在编译器实际运行之前进行简单的文本替换,对吧?

2 个答案:

答案 0 :(得分:1)

没有什么可以阻止这一点。它甚至常用(虽然我不知道对于iPhone),例如,在设备驱动程序实现中。在这种情况下,宏用于生成样板代码,并且要使此样板与代码通信,您必须猜测正确的函数名称(不建议),或者使用生成宏,例如USB_ATTACH(uthum)来生成uthum驱动程序的attach方法的签名。

答案 1 :(得分: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

除了“#import”指令外,Objective-C的预处理器基本上与C preprocessor相同。 (“#import”类似于“#include”,除了#import意味着只包含一次,因此只有#import包含的头文件不需要预处理器保护。

相关问题