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

发布于 2024-10-03 11:52:53 字数 164 浏览 2 评论 0原文

是否有任何理由更喜欢

#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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

层林尽染 2024-10-10 11:52:53

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

MY_MACRO()
MY_MACRO ( )
MY_MACRO
( )

但这不会:

MY_MACRO SomethingElse

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

从美学角度来看,不使用采用零参数的类似函数的宏通常(但并非总是)更干净。

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():

MY_MACRO()
MY_MACRO ( )
MY_MACRO
( )

But this would not:

MY_MACRO SomethingElse

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.

有木有妳兜一样 2024-10-10 11:52:53

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

MY_MACRO();

vs

MY_MACRO;

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

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:

MY_MACRO();

vs

MY_MACRO;

That is if the definition is used to call code, rather than just a simple constant value.

爱的十字路口 2024-10-10 11:52:53

当您需要传递参数时,最好使用 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 ...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文