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__
