4

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

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

由于这是在编程入门课上,我怀疑他只是在简化源文件和编译器之间的关系,但我还是想验证一下我的理解。

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

4

3 回答 3

8

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

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

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

于 2013-06-17T13:43:46.817 回答
2

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

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

于 2013-06-17T13:48:27.320 回答
0

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

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

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

  2. 包括警卫;即模式,

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

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

于 2013-06-17T13:45:58.623 回答