什么是C11标准的源文件

时间:2014-11-17 11:36:26

标签: c c11

我对标准C11的这一段中的一句话表示怀疑:

5.1.1.1程序结构

  

C程序不需要同时翻译。的文本   程序保存在称为源文件的单元中(或预处理   在本国际标准中。源文件与所有   通过预处理指令#include包含的头文件和源文件称为预处理翻译单元。

首先,它表示程序的文本保存在称为源文件的单元中。 之后它说源文件连同头文件和源文件被称为预处理翻译单元。

源文件是否与头文件或源文件不同,实体包括两者?

3 个答案:

答案 0 :(得分:4)

源文件是包含源代码的任何文本文件(或其他特定于实现的实体,根据Basile的回答)。这具体包括.c.h文件。它还可能包含带有其他后缀的文件,如预处理程序或生成的代码文件。

当您将一些源文件实际传递给编译器时(通常只有.c个文件),该文件与(传递闭包)一起#include形成一个翻译单元

所以:每个翻译单元都是由源文件构建的。

但是:并非每个源文件都是翻译单元的起点。

答案 1 :(得分:2)

迂腐地说,源文件(在C99或C11标准意义上)甚至不一定是文件(在操作系统意义上)。符合标准的实现可以从数据库中读取“源文件”或在某个程序中读取一些常量字符串。

据传,20世纪90年代的一个专有IBM编译器(VisualAge ???)从某个数据库获得了编译源代码。今天,tinycc还为libtcc库提供了函数tcc_compile_string来编译字符串。 TinyCC正在快速编译成机器代码。

实际上,通常会有多个源文件(例如.h.c文件)在同一个编辑或translation unit内处理。

IIUC,关于C标准的有趣之处在于它们并不假设实现的文件系统具有。我相信标准甚至不需要电脑;你可能会使用一堆人类奴隶来不道德地实施这个标准,但这是不道德和低效的。

答案 2 :(得分:1)

术语源文件(或预处理文件)反映了.c源文件和.h标头。 C标准不区分它们。

在K. N. King的“C编程:现代方法”一书(第15.2节)中明确提到。