Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
表示C++;以标准的方式在源代码中设置标准 标准兼容C++编译器定义了一个 在预处理过程中进行检查,以确定采用何种标准 正在编译文件,例如:_C++_C++11_Compilation - Fatal编程技术网

表示C++;以标准的方式在源代码中设置标准 标准兼容C++编译器定义了一个 在预处理过程中进行检查,以确定采用何种标准 正在编译文件,例如:

表示C++;以标准的方式在源代码中设置标准 标准兼容C++编译器定义了一个 在预处理过程中进行检查,以确定采用何种标准 正在编译文件,例如:,c++,c++11,compilation,C++,C++11,Compilation,因此,编写正则表达式(例如正则表达式)将变得相当棘手,难以捕捉所有变化 编辑: 虽然我赞同@Gary的回答,他建议依赖构建系统, 它假设我们实际上将有一个构建步骤 但你今天已经可以: 使用解释器使用C++软件运行< C++ > 或者使用源到源的翻译,例如 我的问题也是关于源代码是C++和什么版本的问题 它是为(想象一下70年后有人挖出我的代码) 当C++可能像今天的Cobol一样流行时。 我猜我要找的东西是HTML的C++等价物: C++标准在某种程度上有点像是针对库进行开发。从这个意义上说

因此,编写正则表达式(例如正则表达式)将变得相当棘手,难以捕捉所有变化

编辑:

虽然我赞同@Gary的回答,他建议依赖构建系统, 它假设我们实际上将有一个构建步骤

但你今天已经可以:

  • 使用解释器使用C++软件运行< C++ >
  • 或者使用源到源的翻译,例如
我的问题也是关于源代码是C++和什么版本的问题 它是为(想象一下70年后有人挖出我的代码) 当C++可能像今天的Cobol一样流行时。

我猜我要找的东西是HTML的C++等价物:

C++标准在某种程度上有点像是针对库进行开发。从这个意义上说,库通常以一种缓慢地弃用旧函数,同时访问新函数的方式发展。典型的方法是引入新方法或签名,同时仍然允许访问旧方法或签名

举个简单的例子,例如,你可以为iPhone制作一个向后兼容iOS4及以上版本的应用程序。您没有选择要支持哪些特定版本的选项。这是很好的,因为如果不这样做,您将代码演化扩展到一个可能性矩阵,从而使您的代码更难理解和维护

或者,您可以引入预处理器指令,根据某种版本或标志有条件地构建某些片段。但是,这些是临时措施,应该随着代码的发展而删除

所以我认为,要回答这个问题,最好的问题是在这种情况下问问自己,添加这样的东西会解决什么问题,会不会增加不必要的复杂性(其中一个代码有糟糕设计的味道)

在这种情况下,根据经验,我个人认为你最好坚持一个标准。我想您会发现,通过使用各种预处理器ifdef和ifndefs来区分标准会使理解代码库变得难以理解和管理。即使您有一个包含文件,其中定义了所有其他文件所包含的允许版本,它也会成为另一个需要管理的文件……更不用说当您更改它时,您必须重新编译包含它的所有内容

如果您担心有人使用错误的标准构建代码库,请使用不要求开发人员输入该信息的构建系统。例如Make、Ant、cmake。它使软件的构建变得简单,并明确定义了如何以可重复的方式编译项目。如果您这样做的话,您会发现试图保护代码不被不正确地编译是没有问题的


此外,如果他们不遗余力地使用错误的标准进行编译,他们会遇到大量的编译器错误=)

出于兴趣,你为什么会在意呢?如果您编写的代码在98年可编译,那么它应该在03或11年可编译(您可能使用了不推荐使用的函数-可能),但它应该可编译-那么目的是什么?@Nim我想这大概是该文件要求的最低版本。@leems,让我换一种方式问这个问题,如果一个文件说它可以用98编译,
std=
是否更改为该文件的格式?如果不是,那么这种方法就没有意义了,IMHO,在项目级别决定您使用的是哪个版本,并可能检查文件以处理较旧的编译器(如果太旧则拒绝…@Nim我有一个构建脚本,我想自动检测我的源代码是否使用C++11,所以我不必设置适当的-std标志。通常,您可以强制执行编译器的最新标准,例如
-std=c++11
,但严格来说,c++11标准有一些向后不兼容的更改。一般来说,我认为它是好的文档(例如C++标题通常以‘.h’结尾’,因此,如果不手动检查C标题,可能会有一些混淆)。
#if __cplusplus < 201103L
#error "You need a C++11 compliant compiler."
#endif

#include <iostream>
#include <vector>

int main(){
    std::vector<int> v {1, 2, 3};
    for (auto i : v){
        std::cout << i << " ";
    }
    std::cout << std::endl;
    return 0;
}
#if __cplusplus <= 199711L
#error "You need a C++11 compliant compiler."
#endif