有没有理由喜欢
#define MY_MACRO() ..stuff..
到
#define MY_MACRO ..stuff..
不要使用宏不是一个有效的答案......
答案 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 ...