C++通过宏定义判断操作系统及编译器

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__

猜你喜欢

转载自www.cnblogs.com/HNFOX/p/11273831.html