gpt4 book ai didi

c - C中的翻译单元到底是什么

转载 作者:太空狗 更新时间:2023-10-29 16:30:31 24 4
gpt4 key购买 nike

翻译单元 的常用定义是预处理后的内容(头文件包含、宏等以及源文件)。这个定义相当清楚,C 标准 5.1.1.1,C11 说:

A C program need not all be translated at the same time. The text of the program is kept in units called source files, (or preprocessing files) in this International Standard. A source file together with all the headers and source files included via the preprocessing directive #include is known as a preprocessing translation unit. After preprocessing, a preprocessing translation unit is called a translation unit.

仔细阅读第一句话:

A C program need not all be translated at the same time.

这意味着(根据我的阅读),一个 C 程序可以被同时翻译,而不必将它们拆分成多个预处理源文件。同样在同一段的末尾,标准说:

Translation units may be separately translated and then later linked to produce an executable program.

这可以(通常是)解释为编译单个目标文件,然后最终将它们链接以生成单个可执行程序。但是,如果有人可以从上述陈述中提出问题并提出疑问:这是否意味着实现可以自由地将多个源文件视为单个翻译单元,尤其是对于像这样的调用:

gcc file1.c file2.c -o out

编译器在哪里可以访问整个源代码?

特别是,如果一个实现将 file1.c + file2.c(上文)视为单个翻译单元,是否可以将其视为不合格?

最佳答案

在你引用的第二行中:

The text of the program is kept in units called source files, (or preprocessing files) in this International Standard

如果有两个源文件,则有两个预处理文件,因此有两个预处理翻译单元,因此有两个翻译单元。每个源文件对应一个。

标准没有定义源文件。我猜编译器可能会说“我正在通过声明 file1.cfile2.c 毕竟不是源文件来构建我自己的‘源文件’版本!”并将它们连接起来,但这与程序员的期望不一致。我认为您很难争辩说 file1.c 不是源文件。

关于c - C中的翻译单元到底是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42262802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com