搜尋一個問題 C、C++判斷作業系統 是 Linux還是windows 還是Unix【編譯器內建宏 探索(不是特別滿意)】

來源:互聯網
上載者:User

得到的答案 都不好。為什麼,因為他們都不知道原理。其實原理很簡單,編譯器 參數或Makefile添加了宏定義,你才可以這樣去判斷。

比如編譯器設定了宏 is_windows,你才能去用。不設定沒法用。

但是,我敢肯定各種編譯器 內建一些宏,比如 MS VC的cl.exe ,LINUX的GNU gcc,在各個平台都會有不同的內建宏的。

 

所以 如果我搜尋 "各個編譯器 內建宏 作業系統" 少量的答案中 有一個 :

C++:編寫跨平台程式的關鍵,C/C++中的內建宏定義分兩部分:作業系統判定:Windows:   WIN32Linux:   linuxSolaris:   __sun編譯器判定:VC:  _MSC_VERGCC/G++:   __GNUC__SunCC:   __SUNPRO_C和__SUNPRO_CC 轉載自:http://blog.csdn.net/avagrant158/article/details/6298145

還算湊合,但是還不夠,各個編譯器 到底內建那些宏,我們怎麼才能知道呢?你得告訴我方法啊,沒法弄,有空了去msdn查查(也不一定能查到,他們不一定說的),gcc可以看原始碼,但是那麼多代碼,老費勁了。

 下面 根據這個,我寫了個跨平台的C++程式。不過 _UNIX WINDOWS倆宏  暫時是錯誤的。不會輸出

 testDefineOS.cpp源碼

#include <stdio.h>#include <iostream>using namespace std;int main(int argc,char **argv){    int no_os_flag=1;    #ifdef linux       no_os_flag=0;       cout<<"It is in Linux OS!"<<endl;    #endif    #ifdef _UNIX       no_os_flag=0;       cout<<"It is in UNIX OS!"<<endl;    #endif    #ifdef __WINDOWS_       no_os_flag=0;       cout<<"It is in Windows OS!"<<endl;    #endif    #ifdef _WIN32       no_os_flag=0;       cout<<"It is in WIN32 OS!"<<endl;    #endif    if(1==no_os_flag){        cout<<"No OS Defined ,I do not know what the os is!"<<endl;    }    return 0;}

在win /Linux 使用 MS VC cl.exe編譯器(不知道如何稱呼cl.exe,大家一般不這麼叫吧,但是gcc確實可以那麼叫),和 gcc編譯器的結果

Win Cl.exe編譯器結果==============D:\>cl.exe testDefineOS.cpp用於 80x86 的 Microsoft (R) 32 位 C/C++ 最佳化編譯器 16.00.40219.01 版著作權(C) Microsoft Corporation。著作權所有,並保留一切權利。testDefineOS.cppC:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xlocale(323) : warning C4530: 使用了 C++ 例外處理常式,但未啟用展開語義。請指定 /EHscMicrosoft (R) Incremental Linker Version 10.00.40219.01Copyright (C) Microsoft Corporation.  All rights reserved./out:testDefineOS.exetestDefineOS.objD:\>testDefineOS.exeIt is in WIN32 OS!D:\>Linux GCC編譯器結果==================ayanmw@ayanmw-desktop:~$ g++ test    testDefineOS.cpp ;./a.outIt is in Linux OS!ayanmw@ayanmw-desktop:~$ Windows GCC.exe(MINGW)=======================D:\>g++ testDefineOS.cppD:\>a.exeIt is in WIN32 OS!D:\>

 

關於 C中的先行編譯宏定義 還請看http://os.chinaunix.net/a2008/1216/989/000000989777.shtml

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.