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


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

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

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

 

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

C++:編寫跨平台程序的關鍵,C/C++中的內置宏定義
分兩部分:

操作系統判定:

Windows:   WIN32

Linux:   linux

Solaris:   __sun

編譯器判定:

VC:  _MSC_VER

GCC/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.cpp
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xlocale(323) : wa
rning C4530: 使用了 C++ 異常處理程序,但未啟用展開語義。請指定 /EHsc
Microsoft (R) Incremental Linker Version 10.00.40219.01
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:testDefineOS.exe
testDefineOS.obj

D:\>testDefineOS.exe
It is in WIN32 OS!

D:\>






Linux GCC編譯器結果
==================
ayanmw@ayanmw-desktop:~$ g++ test    testDefineOS.cpp ;./a.out
It is in Linux OS!
ayanmw@ayanmw-desktop:~$ 




Windows GCC.exe(MINGW)
=======================
D:\>g++ testDefineOS.cpp

D:\>a.exe
It is in WIN32 OS!

D:\>

 

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


免責聲明!

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



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