C预处理器语句是否是C语言的一部分?

我记得我的一位教授在C课程中的主张。 他说,# #define预处理器命令使程序员能够创建一个常量,以便在以后的代码中使用,并且该命令是C语言一部分

 /* Is this truly C code? */ #define FOO 42 

由于这是一个介绍性的编程类,我怀疑他只是简化了源文件和编译器之间的关系,但我希望validation我的理解。

预处理器语句是否完全独立于C语言(取决于所使用的特定编译器)还是在C99标准中明确描述? 出于好奇,K&R曾经提到过预处理器宏吗?

是的,该标准描述了预处理器。 它是C语言的标准化部分。

请注意, #include对于代码的模块化至关重要,它是一个预处理器指令。

在公开可用的C99标准草案中 ,预处理器在6.10节中描述。

预处理器确实是C和C ++标准的一部分(C ++标准中的第16章),标准描述了预处理器和语言如何交互(例如,重新定义C关键字是非法的)。

但是,对于任何类型的简单文件预处理,C预处理器都可以使用除C之外的其他语言(我已经看到它与LaTeX文件一起使用)。

是的预处理器 C语言的一部分。 从概念上讲,它是在编译源之前运行的。

除了定义之外,预处理器还用于实现两个非常重要的结构:

  1. #include将其他文件带入编译单元。

  2. 包括警卫 ; 即模式,

     #if !defined(METAWORD) #define METAWORD 1 /* struct definition, function prototype */ #endif 

出于兴趣,这两种用法已经存活到C ++中,常量定义可以用其他(更好的)方式实现。