没有参数的预处理器宏和零参数的宏之间有什么区别

时间:2010-11-22 22:49:28

标签: macros c-preprocessor

有没有理由喜欢

#define MY_MACRO() ..stuff..

#define MY_MACRO ..stuff..

不要使用宏不是一个有效的答案......

3 个答案:

答案 0 :(得分:17)

如果宏名称后跟左括号,则仅替换类似函数的宏。因此,以下所有内容都会调用类似函数的宏MY_MACRO()

MY_MACRO()
MY_MACRO ( )
MY_MACRO
( )

但这不会:

MY_MACRO SomethingElse

这取决于您使用宏的方式以及它的用途是否重要。理想情况下,您的宏将具有不同的名称;如果为宏保留全大写标识符,那么使用类似对象或类似函数的宏参数是否无关紧要。

在美学上,通常(但并非总是)更清洁,不使具有零参数的类似函数的宏。

答案 1 :(得分:7)

我更喜欢使用MY_MACRO()括号,因为感觉更像是在调用函数。否则看起来我正在调用常量:

MY_MACRO();

VS

MY_MACRO;

即如果定义用于调用代码,而不仅仅是一个简单的常量值。

答案 2 :(得分:1)

当您要传递参数时,最好使用宏(x)。如果你正在做一个简单的“替换”,那么,IMO,最好使用#define BLAH ...