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

问题描述 投票:0回答:3

我记得我的一位教授在 C 入门课程中提出的一个主张。他表示,

#define
预处理器命令使程序员能够创建一个常量以在以后的代码中使用,并且该命令是C语言的一部分

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

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

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

c standards c99 c-preprocessor
3个回答
11
投票

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

请注意,

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

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


2
投票

预处理器确实是 C 和 C++ 标准的一部分(C++ 标准中的第 16 章),并且标准描述了预处理器和语言如何交互(例如,重新

#define
C 关键字是非法的)。

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


2
投票

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

与常量定义一起,预处理器用于实现两个非常重要的构造:

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

  2. 包括警卫;即模式,

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

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

© www.soinside.com 2019 - 2024. All rights reserved.