本文主要是介绍__cplusplus注意事项,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
__cplusplus注意事项
__cplusplus是C++编译器内部定义的宏,用于定义c++编译器的版本,一般开发人员用此宏判断是c程序还是c++程序,除此外,不清楚__cplusplus的其余用途,其实C++11中,__clpusplus则被定义为201103L,c++14中,则被定义成201402L,这些值在系统 头文件中有用到,下面举个例子:
decay_t是个类型,c++14中定义,位于头文件type_traits中,笔者最近在做qt的国产化,将qt的工程从windows下迁移到linux下,结果linux下就是编译不过,报decay_t不存在,由于工程量巨大,怕是头文件引用顺序不对导致,笔者心中不甚惶恐,为此笔者单独写个小程序,里面有使用decay_t,如下所示(文件名叫decay.cpp,笔者的gcc版本是8.3.0):
#include <stdlib.h>#include <iostream>
#include <tuple>template<class _Fn>
void MyPrint(_Fn data1)
{typedef std::tuple<std::decay_t<_Fn>, std::decay_t<_Fn>> TupType;TupType a;
}using namespace std;int main(int argc, char* argv[])
{int a = 1;MyPrint<int>(a);return 0;
}
结果编译良好,为此寡人稍微心安了些,接着我用g++ -E decay.cpp -o decay.i进行预编译处理,截图如下
图一
可以看到decay_t有定义,同理,我在国产化项目中,也进行预编译处理,结果无decay_t定义,截图一段如下:
图二
图二红色方框的部分在图一中也能找到,但是红色方框下面就不同了,于是到头文件type_traits查看红色方框附近内容,如下图所示:
可以看到有个#if __cplusplus >= 201402L的判断,则判断工程中__cplusplus小于201402导致,后面检查编译选项,看到了下面的一段:
mips64el-linux-gnuabi64-g++ -w -c -pipe -g -std=gnu++11
其中gnu++11表示c++11,对应的值是201103,为此问题解决了。
如果想查看当前__cplusplus的值,可以用下面的程序打印:
#include<iostream>
using namespace std;
int main(){cout<<__cplusplus<<endl;return 0;
}
这篇关于__cplusplus注意事项的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!