gpt4 book ai didi

c++ - C++20 是否强制将源代码存储在文件中?

转载 作者:行者123 更新时间:2023-12-01 17:38:45 25 4
gpt4 key购买 nike

一个有点奇怪的问题,但是,如果我没记错的话,C++ 源代码不需要文件系统来存储其文件。

拥有一个通过相机扫描手写论文的编译器将是一个符合要求的实现。尽管实际上没有多大意义。

但是 C++20 现在添加了源位置 file_name 。现在这是否意味着源代码应该始终存储在文件中?

最佳答案

不,源代码不必来自文件(也不必转到文件)。

您可以在管道中完全编译(和链接)C++,将编译器放在中间,例如

generate_source | g++ -o- -xc++ - | do_something_with_the_binary

几十年来一直如此。另请参阅:

介绍std::source_location C++20 中的 并不会改变这种状况。只是有些代码不会有明确定义的源位置(或者可能定义明确,但意义不大)。实际上,我想说的是坚持定义 std::source_location使用文件有点短视……尽管公平地说,它只是 __FILE__ 的无宏等效项。和__LINE__ C++(和 C)中已经存在。

@HBv6 指出,如果打印 __FILE__ 的值使用 GCC 从标准输入流进行编译时:

echo -e '#include <iostream>\n int main(){std::cout << __FILE__ ;}' | g++ -xc++  -

运行生成的可执行文件打印 <stdin> .

源代码甚至可以来自互联网。

@Morwenn 指出此代码:

#include <https://raw.githubusercontent.com/Morwenn/poplar-heap/master/poplar.h>

// Type your code here, or load an example.
void poplar_sort(int* data, size_t size) {
poplar::make_heap(data, data + size);
poplar::sort_heap(data, data + size);
}

works on GodBolt (但无法在您的机器上运行 - 没有流行的编译器支持此功能。)

您是语言律师吗?好吧,让我们查阅一下标准..

C++程序源是否需要来自文件的问题,在语言标准中并没有明确的答案。查看 C++17 标准草案 (n4713),第 5.1 节 [lex.separate] 内容如下:

  1. The text of the program is kept in units called source files in this document. A source file together with all the headers (20.5.1.2) and source files included (19.2) via the preprocessing directive #include, less any source lines skipped by any of the conditional inclusion (19.1) preprocessing directives, is called a translation unit.

因此,源代码本身不一定保存在文件中,而是保存在“称为源文件的单元”中。但是,这些包含内容从哪里来呢?人们会假设它们来自文件系统上的命名文件...但这也不是强制性的。

无论如何,std::source_location似乎并没有改变 C++20 中的这种措辞或影响其解释。

关于c++ - C++20 是否强制将源代码存储在文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57548221/

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