2013-07-06 56 views
2

如何在C終端應用程序中確定用戶的操作系統? 例如,在下面的代碼中,我應該用什麼替換windowslinux在C終端應用程序中檢測用戶操作系統,C

/* pseudo code */ 
if(windows) 
{system(cls)} 
else if(linux) 
{system(clear)} 
else{...} 

我要指出,我是下的初學者,需要這樣的事情,所以我的代碼可以在Windows和/或Linux的工作,而不進行單獨的源每個。

+3

必須在運行時執行檢測嗎? –

+0

確實。它更容易檢測在編譯時 - 編譯器定義預處理器符號來表示你正在構建其上的操作系統。的 –

+1

可能重複[如何檢測可靠的Mac OS X,iOS版,Linux和視窗在C預處理?](http://stackoverflow.com/questions/5919996/how-to-detect-reliably-mac-os-x- IOS-Linux的窗口,在-C預處理器) –

回答

0

在編譯時而不是運行時檢測環境可能更好。使用像C這樣的編譯語言,你不會像使用Java這樣的lanugage那樣在不同的平臺上運行相同的編譯器輸出,所以你不需要在運行時進行這種檢查。

This是我用來確定我的代碼正在編譯的平臺的頭文件。它將根據操作系統(以及其他內容)定義不同的宏。

事情是這樣的使用:

#if defined(UTIL_PLATFORM_WINDOWS) 
    printf("windows\n"); 
#elif defined(UTIL_PLATFORM_UNIXLIKE) 
    printf("Unix\n"); 
#endif 
1

我相信你可以通過在編譯時專門的「功能」,避免運行時檢查。那麼,這個怎麼樣,那麼:

#ifdef WIN32 
    CLEAR = cls 
#elif __linux__ 
    CLEAR = clear 
#endif 

Predefs從編譯器有所不同的編譯器,所以這裏是一個很好的名單有:http://sourceforge.net/p/predef/wiki/OperatingSystems/

5

通常,這是在構建系統的宏做(因爲你必須BUILD每個系統無論如何的代碼。

例如gcc -DLINUX myfile.c

,然後在myfile.c文件

#ifdef LINUX 
    ... do stuff for linux ... 
#else if defined(WINDOWS) 
    ... do something for windows ... 
#else if ... and so on. 
    ... 
#endif 

(大多數情況下,您可以通過使用predefined macros來編譯該體系結構的工具,找到某種實際上並不需要在命令行上添加-D<something>的方法)。

或者,你CA做同樣的事情,但更快,更好的(但不是100%便攜式)通過打印ANSI escape sequence的「清屏」:

putstr("\033" "2J"); 

是的,這兩個字符串,因爲如果你寫"\0332J"編譯將使用字符0332,而不是字符033,其次是數字2.因此,兩個相鄰的字符串將做的伎倆。

相關問題