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

Ste*_*phQ 28 macros c-preprocessor

有什么理由比较喜欢

#define MY_MACRO() ..stuff..
Run Code Online (Sandbox Code Playgroud)

#define MY_MACRO ..stuff..
Run Code Online (Sandbox Code Playgroud)

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

Jam*_*lis 19

如果宏名称后跟左括号,则仅替换类似函数的宏.所以,以下都调用类似函数的宏MY_MACRO():

MY_MACRO()
MY_MACRO ( )
MY_MACRO
( )
Run Code Online (Sandbox Code Playgroud)

但这不会:

MY_MACRO SomethingElse
Run Code Online (Sandbox Code Playgroud)

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

在美学上,通常(但不总是)更清洁,不使具有零参数的类似功能的宏.


Vic*_*ian 7

我喜欢用MY_MACRO(),括号,因为它给人的感觉更像我打电话的功能.否则看起来我正在调用一个常数:

MY_MACRO();
Run Code Online (Sandbox Code Playgroud)

VS

MY_MACRO;
Run Code Online (Sandbox Code Playgroud)

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

  • 如果`MY_MACRO`只是一个函数的包装器(一个可能隐藏在某个地方,或者需要根据环境或其他东西进行更改),那么在没有括号的情况下定义它将允许您将该函数作为函数指针传递给其他函数功能,可能有用也可能没用. (7认同)