我最近遇到过"多传递编译器"这个术语.从本质上讲,任何编译器都可以通过多次传递来解析源代码.
让我想一想,C预处理器多通道运行吗?
假设我有以下C代码.
int bar = foo;
#define foo 1
Run Code Online (Sandbox Code Playgroud)
在传递过程中唯一可行的方法是,如果预处理器一直在寻找预处理器指令的代码,然后返回代码来进行替换.
这是预处理器的功能吗?
让我想一想,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.