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

时间:2016-05-12 01:21:32

标签: c++ c

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

这让我想到,C预处理器多次通过了吗?

我们说我有以下C代码。

int bar = foo;

#define foo 1

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

这是预处理器的功能吗?

1 个答案:

答案 0 :(得分:6)

  

这让我想到,C预处理器多次通过了吗?

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

int bar = foo;

#define foo 1

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

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