我记得我的一位教授在 C 入门课程中提出的主张。他说#define
预处理器命令使程序员能够创建一个常量供以后的代码使用,并且该命令是C 语言的一部分。
/* Is this truly C code? */
#define FOO 42
由于这是在编程入门课上,我怀疑他只是在简化源文件和编译器之间的关系,但我还是想验证一下我的理解。
预处理器语句是完全独立于 C 语言(取决于使用的特定编译器)还是在C99 标准中明确描述?出于好奇,K&R 有没有提到过预处理器宏?
我记得我的一位教授在 C 入门课程中提出的主张。他说#define
预处理器命令使程序员能够创建一个常量供以后的代码使用,并且该命令是C 语言的一部分。
/* Is this truly C code? */
#define FOO 42
由于这是在编程入门课上,我怀疑他只是在简化源文件和编译器之间的关系,但我还是想验证一下我的理解。
预处理器语句是完全独立于 C 语言(取决于使用的特定编译器)还是在C99 标准中明确描述?出于好奇,K&R 有没有提到过预处理器宏?
预处理器确实是 C 和 C++ 标准的一部分(C++ 标准中的第 16 章),并且标准描述了预处理器和语言如何交互(例如,重新定义#define
C 关键字是非法的)。
但是,C 预处理器可以与 C 以外的其他语言一起用于任何类型的简单文件预处理(例如,我已经看到它与 LaTeX 文件一起使用)。
是的,预处理器是C 语言的一部分。从概念上讲,它在源代码编译之前运行。
除了常量定义,预处理器还用于实现两个非常重要的结构:
#include
它将其他文件带入编译单元。
包括警卫;即模式,
#if !defined(METAWORD)
#define METAWORD 1
/* struct definition, function prototype */
#endif
出于兴趣,这两种用法已经存在于 C++ 中,常量定义可以以其他(更好?)方式实现。