我最近遇到过“多通道编译器”这个术语。从本质上讲,任何编译器都可以通过多次传递解析源代码。
这让我想到,C预处理器多次通过了吗?
我们说我有以下C代码。
int bar = foo;
#define foo 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。