Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.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++ 03宏是什么?_C++_C_Macros_C++03 - Fatal编程技术网

C++ 03宏是什么?

C++ 03宏是什么?,c++,c,macros,c++03,C++,C,Macros,C++03,我试图使用-std=c++03编译一个库,但编译失败,因为未定义nullptr\t 如何保证使用硬编码宏进行C++03而不是C++11编译 提前感谢。不幸的是,我不知道有哪种宏适用于所有编译器。对于g++和clang,有一个名为_GXX_EXPERIMENTAL_CXX0X_uuu的宏,它只在c++11中定义,因此您可以这样做 #ifndef __GXX_EXPERIMENTAL_CXX0X__ // Do some c++03 specific code #endif 本标准中唯一的版本

我试图使用-std=c++03编译一个库,但编译失败,因为未定义nullptr\t

如何保证使用硬编码宏进行C++03而不是C++11编译


提前感谢。

不幸的是,我不知道有哪种宏适用于所有编译器。对于g++和clang,有一个名为_GXX_EXPERIMENTAL_CXX0X_uuu的宏,它只在c++11中定义,因此您可以这样做

#ifndef __GXX_EXPERIMENTAL_CXX0X__
  // Do some c++03 specific code
#endif

本标准中唯一的版本检测是C++11 ISO/IEC 14882-2011§16.8/1的宏“201103”和C++98 ISO/IEC 14882-1998§16.8/1的宏“199711”的值。C++03显然不配拥有自己的编号,它使用了199711以及ISO/IEC 14882-2003§16.8/1。如果您认为这不足以作为特征检测的手段


在任何情况下,您都可能需要查阅相关库的文档,以确定如何将其配置为C++11之前版本(如果可能的话)。

我有点被您的问题弄糊涂了。std::nullptr__t是C++11及以上版本。您使用的是什么编译器?另外,出于好奇,您为什么使用-std=C++03进行编译?Duck:我对您的问题有点困惑。std::nullptr_t是C++11在为C++03编译时,Boost库假定其存在。因为-std=c++03是不够的,我想知道我应该定义什么宏。唯一的问题是,根据C++11的支持程度,何时更改它有点灰色,而且GCC的某些版本将其定义为1 IIRC。从技术上讲,该标准规定——尽管是在非规范性脚注中——不符合标准的编译器应使用最多五位小数的值。因此,GCC的这些版本可能只是符合不符合要求的编译器*大脑爆炸了,我是一个linux用户,我刚刚用我当前版本的g++试过,它返回了1,就像你在c++11和c++03中所说的。不过,clang++可以同时使用这两个宏。我想这意味着对于可移植代码,您应该使用uuucplusplus或uuugxx_CXX0X_uuuuuu实验性的uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuucx0x_uuuuuuuuuu。呸。他们花了数年时间创建这些标准,你可能会认为他们会给你一个标准的方法来知道你使用的是哪种标准g++4.8.1返回201103 for-std=c++11。有趣的是,科里鲁上的叮当声是干线r184460和。好吧,也许只是我感兴趣。谢谢凯西。这就解释了为什么我找不到宏。我本以为ANSI或POSIX会定义一些东西。。。。