在C中检测终端应用中的用户OS

use*_*887 2 c unix linux windows macos

如何在C中确定终端应用程序中的用户操作系统?例如,在下面的代码中,我应该替换windowslinux使用什么?

/* pseudo code */
if(windows)
{system(cls)}
else if(linux)
{system(clear)}
else{...}
Run Code Online (Sandbox Code Playgroud)

我应该提一下,我是C的初学者,需要这样的东西,所以我的代码可以在windows和/或linux上运行,而不需要为每个代码创建单独的源代码.

Mat*_*son 5

通常,这是通过构建系统中的宏来完成的(因为您必须为每个系统构建代码.

例如 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
Run Code Online (Sandbox Code Playgroud)

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

或者,您可以执行相同的操作,但通过打印"清除屏幕" 的ANSI转义序列,可以更快更好(但不是100%可移植):

putstr("\033" "2J"); 
Run Code Online (Sandbox Code Playgroud)

是的,这是两个字符串,因为如果你编写"\0332J"编译将使用字符0332,而不是字符033,然后是数字2.所以两个字符串彼此相邻将使用.