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)
.特别要注意,只替换宏名称.其后的带括号的标记不是宏调用的一部分,并且不受宏扩展的影响.
宏BEGIN没有参数,因此生成的代码将是
yy_start = 1 + 2 *(new_state)
Run Code Online (Sandbox Code Playgroud)
它是在预处理中完成的.