对于XCode,默认的C ++语言方言?

时间:2014-12-18 14:56:05

标签: xcode

在Xcode6中,C ++语言方言的“编译器默认值”是什么。

我使用的是C ++新功能std:max(a,b,c)

如果我使用“编译器默认值”,则无法编译。

当我改为“C ++ 11或GNUC ++ 11”时,它编译得很好。

我想知道编译器默认是否是C ++ 98?

1 个答案:

答案 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

}

选择的宏

  1. __cplusplus - 来自gcc online documentation

      

    根据所选的语言标准,宏的值为   199711L,符合1998 C ++标准; 201103L,2011年   C ++标准;一个严格大于201103L的未指定值   实验语言由-std = c ++ 1y和-std = gnu ++ 1y启用。

  2. __STRICT_ANSI__ - 来自clang用户manual

      

    所有c *和gnu *模式之间的差异=&gt; c *模式定义   __STRICT_ANSI__

  3. 作为旁注,可以从此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)"