如何在 C 中确定终端应用程序中用户的操作系统?例如,在下面的代码中,我应该用什么替换windows
和linux
?
/* pseudo code */
if(windows)
{system(cls)}
else if(linux)
{system(clear)}
else{...}
我应该提到我是 C 的初学者,需要这样的东西,这样我的代码就可以在 Windows 和/或 linux 上运行,而无需为每个单独的源代码。
通常,这是通过构建系统中的宏来完成的(因为无论如何您都必须为每个系统构建代码。
例如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>
命令行上添加 a 的方法,方法是为您用于为该架构编译的工具使用预定义的宏)。
或者,您可以通过打印“清除屏幕”的ANSI 转义序列来做同样的事情,但更快更好(但不是 100% 可移植) :
putstr("\033" "2J");
是的,那是两个字符串,因为如果您编写"\0332J"
编译将使用字符0332
,而不是字符 033,后跟数字 2。所以两个相邻的字符串就可以了。
我相信您可以通过在编译期间专门化您的“功能”来避免运行时检查。那么,这个怎么样:
#ifdef WIN32
CLEAR = cls
#elif __linux__
CLEAR = clear
#endif
预定义因编译器而异,因此这里有一个很好的列表:http: //sourceforge.net/p/predef/wiki/OperatingSystems/
在编译时而不是运行时检测环境可能更好。使用像 C 这样的编译语言,你不会像使用 Java 这样的语言那样在不同的平台上运行相同的编译器输出,所以你不需要在运行时进行这种检查。
这是我用来确定我的代码在哪个平台上编译的标头。它将根据操作系统(以及其他事物)定义不同的宏。
使用中这样的东西:
#if defined(UTIL_PLATFORM_WINDOWS)
printf("windows\n");
#elif defined(UTIL_PLATFORM_UNIXLIKE)
printf("Unix\n");
#endif