要用师兄的计算机算东西,无赖那上面是WINDOWS的系统,为了写出能够跨平台的代码,需要在代码中用到宏来选择编译。一种方法是自己在Makefile里面定义好该平台对应的宏。实际上,编译器基本上都会有一些已经定义好的宏来区别当前的平台,不需要自己重新定义。
开源项目Pre-defined Compiler Macros里列出了各种编译器区别不同平台、不同STL库、编译器版本等的宏。 一个更加简单的办法可以获知编译器中预定义好的宏,就是使用命令echo | g++ -dM -E -
。此命令交给编译器一个空文件来做预处理,-dM
使之输出定义的宏,-E
使之在预处理后不再开始编译。通过比较不同平台下这两条命令的结果,挑选一些意义明显的宏就可以用来确定当前使用的平台了。
有人提到下面几个宏可以确定平台,但是有些我并没有看到,估计是因为我没有用其他编译器试过:
操作系统判定:
Windows: WIN32
Linux: linux
Solaris: __sun
编译器判定:
VC: _MSC_VER
GCC/G++: __GNUC__
SunCC: __SUNPRO_C和__SUNPRO_CC
下面介绍几个非常有用的宏:
__LINE__:在源代码中插入当前源代码行号;
__FILE__:在源文件中插入当前源文件名;
__DATE__:在源文件中插入当前的编译日期
__TIME__:在源文件中插入当前编译时间;
__STDC__:当要求程序严格遵循ANSI C标准时该标识被赋值为1;
__cplusplus:当编写C++程序时该标识符被定义。