C预处理器是否多次运行?

Izz*_*zzo 1 c c++

我最近遇到过"多传递编译器"这个术语.从本质上讲,任何编译器都可以通过多次传递来解析源代码.

让我想一想,C预处理器多通道运行吗?

假设我有以下C代码.

int bar = foo;

#define foo 1
Run Code Online (Sandbox Code Playgroud)

在传递过程中唯一可行的方法是,如果预处理器一直在寻找预处理器指令的代码,然后返回代码来进行替换.

这是预处理器的功能吗?

Kei*_*son 8

让我想一想,C预处理器多通道运行吗?

它不一定是,而且通常不是.

int bar = foo;

#define foo 1
Run Code Online (Sandbox Code Playgroud)

宏只能从其定义(#define行)到文件末尾(或相应的#undef)的位置可见.在上面,第一行不会被替换int bar = 1;; 相反,它仍然是int bar = foo;,只有在已经有声明的情况下才有效foo.(该声明将被隐藏#define,但仅限于宏定义的引用.)

预处理器的行为(更确切地说,前几个转换阶段)的行为旨在允许单通道实现.有关规范,请参阅C标准(N1570是最新草案)第5.1.1.2节."预处理器"通常对应于阶段1到4,或者可能是1到5.