我试图阅读和理解用C语言编写的文件(here)并且不太了解C(或者如果它是C ++开头),我想知道如何:
#define BEGIN yy_start = 1 + 2 *
当这样调用时:
BEGIN(new_state)
正在运作。我知道BEGIN
是一个宏/占位符设置yy_start
。但是,我找不到任何关于如何处理传递的参数,operands没有把我带到任何地方。
问题:如果没有明确处理它们,C / C ++宏中的参数如何处理?
答案 0 :(得分:11)
如果没有明确处理它们,C / C ++宏中的参数如何处理?
如果没有使用参数声明宏,则它根本不接受参数。实际上,C明确区分了接受参数的宏和不接受参数的宏。在您的特定情况下,将BEGIN
定义为类似对象的宏:
#define BEGIN yy_start = 1 + 2 *
这次调用......
BEGIN(new_state)
...扩展为:
yy_start = 1 + 2 *(new_state)
。特别要注意,只替换宏名称。其后的带括号的标记不是宏调用的一部分,并且不受宏扩展的影响。
答案 1 :(得分:5)
宏BEGIN没有参数,因此生成的代码将是
yy_start = 1 + 2 *(new_state)
在预处理中完成。