我试图利用预编译的头文件来加速以下链接的编译:https : //codeforces.com/blog/entry/53909
我观察到必须使用相同的 g++ 标志来完成头文件的预编译和 .cpp 程序的后续编译,以加快工作速度,这是有道理的。但是,将 c++ 标准显式设置为默认标准是行不通的。因此,无论是使用预编译g++ stdc++.h
和后续g++ -std=c++14 program.cpp
,也没有,g++ -std=c++14
和g++ program.cpp
工作。
这对我来说没有意义,因为我知道我的编译器 x86_64-w64-mingw32-g++.exe(gcc 版本 10.2.0)默认符合 201402L(c++14)标准,我认为使用g++ -dM -E -x c++ /dev/null | fgrep __cplusplus
,并得到以下响应:
#define __cplusplus 201402L
所以,我的问题是,当 g++ 默认遵守 201402L 时,g++ 和 g++ -std=c++14 之间有什么区别?另外,对于我来说,专门选择其中任何一个是否足够重要?
-std=c++14
默认情况下,GCC 不编译。GCC 手册页(版本 9.3.0)中-std
标志的描述说
-std=
确定语言标准。当前仅在编译 C 或 C++ 时支持此选项。编译器可以接受多个基本标准,例如 c90 或 c++98,以及这些标准的 GNU 方言,例如 gnu90 或 gnu++98。当指定了一个基本标准时,编译器接受所有遵循该标准的程序以及那些使用与它不矛盾的 GNU 扩展的程序。
. . .
必须提供此选项的值;可能的值为
。. .
c++14
c++1y
2014 ISO C++ 标准加修正。名称 c++1y 已弃用。
gnu++14
gnu++1y
-std=c++14 的 GNU 方言。这是 C++ 代码的默认设置。名称 gnu++1y 已弃用。
. . .
强调我的。当前的默认值是-std=gnu++14
,它针对 C++14 标准,同时还支持C++ 语言的GNU 扩展。的区分-std=c++XX
标志和-std=gnu++XX
标志进行说明进一步在什么是-std = C ++ 11和-std = GNU ++ 11之间的差异?.
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句