在Xcode6中,C ++语言方言的“编译器默认值”是什么。
我使用的是C ++新功能std:max(a,b,c)
如果我使用“编译器默认值”,则无法编译。
当我改为“C ++ 11或GNUC ++ 11”时,它编译得很好。
我想知道编译器默认是否是C ++ 98?
答案 0 :(得分:3)
我在代码下面运行 - GNU C ++ 98 。
#include <iostream>
int main()
{
//gnu mode
#ifndef __STRICT_ANSI__
std::cout << "GNU - ";
#endif
// C++ iso standard
#if __cplusplus == 199711L
std::cout << "C++98" << std::endl;
#elif __cplusplus == 201103L
std::cout << "C++11" << std::endl;
#elif __cplusplus > 201103L
std::cout << "C++14" << std::endl;
#endif
}
选择的宏
__cplusplus
- 来自gcc online documentation
根据所选的语言标准,宏的值为 199711L,符合1998 C ++标准; 201103L,2011年 C ++标准;一个严格大于201103L的未指定值 实验语言由-std = c ++ 1y和-std = gnu ++ 1y启用。
__STRICT_ANSI__
- 来自clang用户manual
所有c *和gnu *模式之间的差异=&gt; c *模式定义
__STRICT_ANSI__
作为旁注,可以从此SO answer
中找到用于GNU标准差异的__STRICT_ANSI__
$ g++ -E -dM -std=c++11 -x c++ /dev/null >b
$ g++ -E -dM -std=gnu++11 -x c++ /dev/null >a
$ diff -u a b
--- a 2014-12-19 12:27:11.000000000 +0530
+++ b 2014-12-19 12:27:05.000000000 +0530
@@ -144,6 +144,7 @@
#define __STDC_UTF_16__ 1
#define __STDC_UTF_32__ 1
#define __STDC__ 1
+#define __STRICT_ANSI__ 1
#define __UINTMAX_TYPE__ long unsigned int
#define __USER_LABEL_PREFIX__ _
#define __VERSION__ "4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.54)"