没有参数的预处理器宏和零参数的预处理器宏之间有什么区别
是否有任何理由更喜欢
#define MY_MACRO() ..stuff..
“
#define MY_MACRO ..stuff..
不使用宏”不是一个有效的答案......
Is there any reason to prefer
#define MY_MACRO() ..stuff..
to
#define MY_MACRO ..stuff..
Don't use macros is not a valid answer...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
仅当宏名称后跟左括号时,才会发生类似函数的宏的替换。因此,以下所有内容都会调用类似函数的宏
MY_MACRO()
:但这不会:
这取决于您如何使用该宏以及它的用途,这是否重要。理想情况下,您的宏都将具有不同的名称;如果您为宏保留全大写的标识符,那么无论您使用零参数的类对象宏还是类函数宏都没有关系。
从美学角度来看,不使用采用零参数的类似函数的宏通常(但并非总是)更干净。
Replacement only occurrs for a function-like macro if the macro name is followed by a left parenthesis. So, the following all invoke the function-like macro
MY_MACRO()
:But this would not:
It depends on how you are using the macro and what it is used for as to whether or not this is important. Ideally, your macros will all have distinct names; if you reserve all-uppercase identifiers for macros, then it shouldn't matter whether you use an object-like or a function-like macro with zero parameters.
Aesthetically, it's usually (but not always) cleaner not to have function-like macros that take zero parameters.
我更喜欢使用
MY_MACRO()
,带有括号,因为感觉更像是我在调用一个函数。否则看起来我正在调用一个常量:vs
也就是说,如果定义用于调用代码,而不仅仅是一个简单的常量值。
I prefer to use
MY_MACRO()
, with parentheses, because it feels more like I'm calling a function. Otherwise it looks like I'm calling a constant:vs
That is if the definition is used to call code, rather than just a simple constant value.
当您需要传递参数时,最好使用 Macro( x )。如果你正在做一个简单的“替换”,那么,IMO,最好使用#define BLAH ...
Macro( x ) is preferrable when you have parameters to pass. If you are doing a simple "replace" then, IMO, its preferrable to use #define BLAH ...