为什么在c/c ++中需要两个括号来使用宏?

gdb*_*gdb 3 c macros

    KdPrint(("Enter HelloWDMAddDevice\n"));
Run Code Online (Sandbox Code Playgroud)

这样做的原因是什么?

Ran*_*832 7

这样你就可以将整个参数列表传递给宏,并将它传递给一个带有可变数量参数的函数.

我敢打赌那个宏的定义是:

#if DEBUG /* or something like it */
#define KdPrint(args) (printf args)
#else
#define KdPrint(args) /* empty */
#endif
Run Code Online (Sandbox Code Playgroud)

或者类似于其他一些像printf一样工作的函数.

如果它被定义为printf(args),那么你只能传递单个字符串参数,因为宏的参数不能包含不在嵌套括号内的逗号.

  • 不,重点是args可能不止一个带逗号的东西,所以_has_在宏之外被括号括起来. (2认同)