Warm tip: This article is reproduced from serverfault.com, please click

其他-在同一源上多次运行C预处理程序是否安全?

(其他 - Is it safe to run the C preprocessor several times on the same source?)

发布于 2020-11-28 01:50:25

根据我的经验,C预处理程序在先前预处理的源代码上运行时只是无操作。但是这种行为是否可以通过标准得到保证?也许某个实现可以具有一个预处理器,该预处理器可以修改先前经过预处理的代码,例如,删除/修改行指令,或者执行可能会使编译器感到困惑的其他修改?

Questioner
cesss
Viewed
0
Acorn 2020-11-28 10:22:56

通常,cpp不能保证过孔的预处理是幂等的(第一次运行后会出现Noop)。一个简单的反例:

#define X #define Y z
X
Y

第一次调用将产生:

 #define Y z
Y

第二个:

z

话虽如此,有效的C代码不应该这样做(因为输出对于编译器的下一阶段不是有效的输入)。

此外,根据你要尝试执行的操作,可能会有cpp类似的选择-fpreprocessed