如何在C終端應用程序中確定用戶的操作系統? 例如,在下面的代碼中,我應該用什麼替換windows
和linux
?在C終端應用程序中檢測用戶操作系統,C
/* pseudo code */
if(windows)
{system(cls)}
else if(linux)
{system(clear)}
else{...}
我要指出,我是下的初學者,需要這樣的事情,所以我的代碼可以在Windows和/或Linux的工作,而不進行單獨的源每個。
如何在C終端應用程序中確定用戶的操作系統? 例如,在下面的代碼中,我應該用什麼替換windows
和linux
?在C終端應用程序中檢測用戶操作系統,C
/* pseudo code */
if(windows)
{system(cls)}
else if(linux)
{system(clear)}
else{...}
我要指出,我是下的初學者,需要這樣的事情,所以我的代碼可以在Windows和/或Linux的工作,而不進行單獨的源每個。
在編譯時而不是運行時檢測環境可能更好。使用像C這樣的編譯語言,你不會像使用Java這樣的lanugage那樣在不同的平臺上運行相同的編譯器輸出,所以你不需要在運行時進行這種檢查。
This是我用來確定我的代碼正在編譯的平臺的頭文件。它將根據操作系統(以及其他內容)定義不同的宏。
事情是這樣的使用:
#if defined(UTIL_PLATFORM_WINDOWS)
printf("windows\n");
#elif defined(UTIL_PLATFORM_UNIXLIKE)
printf("Unix\n");
#endif
我相信你可以通過在編譯時專門的「功能」,避免運行時檢查。那麼,這個怎麼樣,那麼:
#ifdef WIN32
CLEAR = cls
#elif __linux__
CLEAR = clear
#endif
Predefs從編譯器有所不同的編譯器,所以這裏是一個很好的名單有:http://sourceforge.net/p/predef/wiki/OperatingSystems/
通常,這是在構建系統的宏做(因爲你必須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.因此,兩個相鄰的字符串將做的伎倆。
必須在運行時執行檢測嗎? –
確實。它更容易檢測在編譯時 - 編譯器定義預處理器符號來表示你正在構建其上的操作系統。的 –
可能重複[如何檢測可靠的Mac OS X,iOS版,Linux和視窗在C預處理?](http://stackoverflow.com/questions/5919996/how-to-detect-reliably-mac-os-x- IOS-Linux的窗口,在-C預處理器) –