检测terminal应用程序中的用户操作系统,

如何在Cterminal应用程序中确定用户的操作系统? 例如,在下面的代码中,我应该replacewindowslinux

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

我应该提到,我是C的初学者,并且需要类似这样的代码,所以我的代码可以在Windows和/或Linux上工作,而不需要为每个代码分别创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 

(大多数情况下,通过使用预定义的宏来编译该体系结构,可以找到一些实际上不需要在命令行上添加-D<something>的方法。

或者,你可以做同样的事情,但通过打印“清除屏幕”的ANSI转义序列 ,可以更快更好地(但不是100%便携):

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

是的,这是两个字符串,因为如果你编写"\0332J" ,编译将使用字符0332 ,而不是字符033,接着是数字2.因此,两个字符串相邻将会执行该操作。

我相信你可以通过在编译期间专门化你的'函数'来避免运行时检查。 那么,那么如何呢?

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

Predefs因编译器而异,所以这里有一个很好的列表: http : //sourceforge.net/p/predef/wiki/OperatingSystems/

在编译时而不是运行时检测环境可能会更好。 使用像C这样的编译语言,你不会像使用Java这样的lanugage那样在不同的平台上运行相同的编译器输出,所以你不需要在运行时进行这种检查。

这是我用来确定我的代码正在编译的平台的头文件。 它将根据操作系统(以及其他的东西)定义不同的宏。

像这样的使用中:

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