如何制作一个将字符串返回源代码的宏?

时间:2010-05-24 11:26:18

标签: iphone objective-c macros

示例:我想这样做:

METHODNAME(5) {
    // do something 
}

导致:

- (void)animationStep5 {
    // do something 
}

有没有办法做到这一点?基本上,我需要的是在编译程序之前生成真正的源代码字符串的方法,因此编译器确实看到- (void)animationStep5 ...

或许有一些不同于宏的东西,这可以帮助自动生成方法名称(不是在运行时)?

3 个答案:

答案 0 :(得分:2)

正如已经回答的here,Objective-C预处理器非常接近C语言。

您应该查看那里发布的示例,并查看C proprocessor。您只需使用预处理器的##语法来连接方法名称和所需的数字。

答案 1 :(得分:1)

假设objective-c预处理器的行为与标准C预处理器的行为相同,您可以使用以下内容:

#define PASTE(a, b) a##b
#define METHODNAME(n) PASTE(animationStep,n)

将所需的位加在一起。这意味着

METHODNAME(5)

被翻译为

animationStep5

(您可能需要将问题中的“void”添加到宏definitino,具体取决于您需要做什么)。

答案 2 :(得分:1)

您可以使用连接运算符

#define METHODNAME(i) -(void)animationStep##i

你可以称之为

METHODNAME(5){}

这扩大到了 -(void)animationStep5{}