【问题标题】:Can a macro also generate a method name?宏也可以生成方法名称吗?
【发布时间】:2010-05-24 11:04:20
【问题描述】:

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

【问题讨论】:

    标签: iphone objective-c macros


    【解决方案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 中的标头不需要预处理器保护)。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-18
        • 2016-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-17
        相关资源
        最近更新 更多