如何隐式处理C/C++宏中的参数?

fre*_*ent 0 macros arguments c-preprocessor

我正在尝试阅读和理解用C编写的文件(这里)并且不太了解C(或者如果它是C++开头),我想知道如何:

 #define BEGIN yy_start = 1 + 2 *
Run Code Online (Sandbox Code Playgroud)

当像这样调用时:

 BEGIN(new_state)
Run Code Online (Sandbox Code Playgroud)

工作中.我知道BEGIN是一个宏/占位符设置yy_start.但是我找不到任何关于传入的参数是如何处理的, 操作数也没有让我到处找.

问题:如果没有明确处理它们,如何在C/C++宏中处理参数?

Joh*_*ger 11

如果没有明确处理它们,如何在C/C++宏中处理参数?

如果宏未使用参数声明,则它根本不接受参数.实际上,C明确区分了接受参数的宏和不接受参数的宏.在您的特定情况下,给定一个BEGIN类似对象的宏的定义:

#define BEGIN yy_start = 1 + 2 *
Run Code Online (Sandbox Code Playgroud)

这个调用......

BEGIN(new_state)
Run Code Online (Sandbox Code Playgroud)

...扩展到:

yy_start = 1 + 2 *(new_state)
Run Code Online (Sandbox Code Playgroud)

.特别要注意,只替换宏名称.其后的带括号的标记不是宏调用的一部分,并且不受宏扩展的影响.


Gil*_*evy 5

宏BEGIN没有参数,因此生成的代码将是

yy_start = 1 + 2 *(new_state)
Run Code Online (Sandbox Code Playgroud)

它是在预处理中完成的.