如何在Cterminal应用程序中确定用户的操作系统? 例如,在下面的代码中,我应该replacewindows
和linux
?
/* 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