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

我对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()
{
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
时,它确实意味着一个循环直到结束。可能的重复是不正确的。当使用当时有效的定义遇到标记时,每个标记都会展开。