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

匿名 (未验证) 提交于 2019-12-02 23:52:01

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_

  • _linux

  • _WIN32
  • _WIN64
  • __APPLE__
  • __ANDROID__

编译器宏定义

  • _MSC_VER

  • __BORLANDC__

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!