INTRODUCTION:
C++的编译环境千奇百怪,很多时候一些代码在某些编译环境下可用,一旦移到其他环境下,就会干脆Compile Error
对此,我们可以使用C++的宏定义来判断操作系统,从而进行一些有趣的操作(貌似意义不大)
比如这样
1 #include<iostream> 2 #if !defined(_WIN32)//如果我使用的不是WIN32操作系统 3 #include<bits/stdc++.h>//那我就打开万能头文件 4 #endif //if要和endif搭配使用 5 using namespace std; 6 int main() 7 { 8 cout << "hello world" << endl; 9 return 0; 10 }
对于上面这段代码,vs不允许使用万能头,所以就让他自己去判断一下编译环境是不是Windows,如果不是Windows,而是OJ什么的,那就打开万能头文件
也就是说
我们可以通过 #if defined(XXXX)或者#ifdef XXXX这样的语句来判断当前的操作系统,根据操作系统的不同进行不同操作
而且有趣的是,只要#if与#endif之间的操作在当前编译器下不被执行,不管写什么乱七八糟的东西都不会Compile Error
借助这个操作,我们甚至可以写两个main()函数
1 #include<iostream> 2 using namespace std; 3 #if defined(_WIN32) 4 int main() 5 { 6 cout << "hello world" << endl; 7 return 0; 8 } 9 #else 10 int main() 11 { 12 cout << "HELLO WORLD" << endl; 13 return 0; 14 } 15 #endif
这样的源代码在不同的环境下编译就是完全不同的效果
系统宏定义:
- UNIX _unix
or _unix_
- Linux _linux
or _linux_
- Windows32 _WIN32
- Windows64 _WIN64
- IOS __APPLE__
- android __ANDROID__
编译器宏定义
-
GCC __GNUC__
-
Visual C++ _MSC_VER
-
Borland C++ __BORLANDC__