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