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__


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM