【问题标题】:C preprocessing multi passC 预处理多遍
【发布时间】:2018-05-08 12:01:38
【问题描述】:

我对 c 中的预处理行为有点困惑。

    #include <stdio.h>

#define myMacro anotherMacro

#define anotherMacro 6

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

    return 0;
}

在上面的代码 sn-p 中,结果为 6。然而,初始过程中的宏扩展会将“myMacro”替换为“anotherMacro”。 这意味着预处理器将进行第二次传递以将“anotherMacro”解析为值 6。

【问题讨论】:

标签: c compilation compiler-warnings preprocessor clang++


【解决方案1】:

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

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

#define myMacro anotherMacro

他会将所有出现的 myMacro 替换为字符串 anotherMacro。

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

#include <stdio.h>

#define anotherMacro 6

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

    return 0;
}

现在预处理器可以继续下一个#define
并将每个 anotherMacro 替换为文本 6

【讨论】:

  • 这不正确。当遇到nit 时,每个标记都会使用当时有效的定义进行扩展。
猜你喜欢
  • 2015-10-02
  • 2015-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 2011-07-02
相关资源
最近更新 更多