C多通道预处理
我对c语言中的预处理行为有点困惑C多通道预处理,c,compilation,compiler-warnings,preprocessor,clang++,C,Compilation,Compiler Warnings,Preprocessor,Clang++,我对c语言中的预处理行为有点困惑 #include <stdio.h> #define myMacro anotherMacro #define anotherMacro 6 int main() { int dummy = myMacro; printf("dummy = %d", dummy); return 0; } #包括 #定义myMacro anotherMacro #定义anotherMacro 6 int main() { i
#include <stdio.h>
#define myMacro anotherMacro
#define anotherMacro 6
int main()
{
int dummy = myMacro;
printf("dummy = %d", dummy);
return 0;
}
#包括
#定义myMacro anotherMacro
#定义anotherMacro 6
int main()
{
int dummy=myMacro;
printf(“dummy=%d”,dummy);
返回0;
}
在上面的代码片段中,结果将是6。但是,初始过程中的宏扩展将用“anotherMacro”替换“myMacro”。
这意味着预处理器将进行第二次传递,以将“anotherMacro”解析为值6 预处理器将进行第二次传递。他每行遍历源文件行 所以如果他达到了第一个定义
#define myMacro anotherMacro
他将用字符串anotherMacro替换所有出现的myMacro
处理该行后,文件将如下所示:
#include <stdio.h>
#define anotherMacro 6
int main()
{
int dummy = anotherMacro;
printf("dummy = %d", dummy);
return 0;
}
#包括
#定义anotherMacro 6
int main()
{
int dummy=无热宏;
printf(“dummy=%d”,dummy);
返回0;
}
现在预处理器可以继续执行下一个#define并将每个anotherMacro替换为文本6,这并不意味着整个第二遍。在解析
#defines
时,它确实意味着一个循环直到结束。可能的重复是不正确的。当使用当时有效的定义遇到标记时,每个标记都会展开。