C 中的预处理翻译单元到底是什么?

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

我对C99标准草案中的描述感到困惑。第 5.1.1.1 节,程序结构,指出:

源文件以及通过预处理包含的所有标头和源文件 指令

#include
被称为预处理翻译单元。

该描述听起来像是两个或多个实体(即源文件及其依赖项)的组合(暗示为“一起”)被称为另一个实体(即预处理翻译单元,如下 PTU)。我不确定我是否可以说:

PTU 是一个源文件,包含通过预处理指令包含的所有标头和源文件

#include

如果上面这句话为真,那么下面的源文件属于哪个单元?

/* do-nothing.c */
#define foo 3
int main(void) { return foo; }

上面的文件不与任何头文件或其他源文件在一起,但可以对其进行预处理。

我再举一个例子:

  1. 运算符及其以分号结尾的操作数称为表达式。
  2. 表达式是一个运算符及其以分号结尾的操作数。

在我看来,第二句话没有提供表达式的定义,因为表达式可以包含零个或多个运算符。

c c-preprocessor
1个回答
0
投票

“#include”的作用是将指定文件的内容复制粘贴到当前文件中 - 不多也不少。链接器(在实际编译后运行)不使用它。

因此,预处理器翻译单元是“将包含的文件复制到文件中后文件中的所有内容”。标头后面的实现不是 PTU 的一部分。

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