C预处理多次通过

时间:2018-05-08 12:01:39

标签: 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;
}

在上面的代码片段中,结果为6.但是初始传递中的宏扩展将用“anotherMacro”替换“myMacro”。 这意味着预处理器将进行第二次传递以将“anotherMacro”解析为值6.

1 个答案:

答案 0 :(得分:-2)

预处理器将进行第二次传递。他每行通过源文件行。

所以,如果他到达第一个定义

#define myMacro anotherMacro

他将使用字符串 anotherMacro 替换所有出现的 myMacro

处理完行后,文件将如下所示:

#include <stdio.h>

#define anotherMacro 6

int main()
{
    int dummy = anotherMacro;
    printf("dummy = %d", dummy);

    return 0;
}

现在预处理器可以继续下一个#define
  并使用 6

文本替换每个 anotherMacro