在C/C++中自动检测OS

123*_*23d 5 c c++ operating-system cross-platform

有没有办法使用您的C/C++代码自动检测您的操作系统?我需要这个来为Linux,Windows运行一些跨平台代码,甚至在Raspberry Pi上运行.我正在尝试自动检测操作系统,以便我不会处理我必须要求在机器上运行的操作系统作为输入的情况.

我正在考虑像验证文件系统结构或其他类似的黑客,我不知道我是否正在做某事.

Jee*_*tel 6

我过去使用下面的代码来检查linux和windows之间

#include<stdio.h>

int main(int argc, char *argv[])
{

#ifdef _WIN32
   printf("in Windows");
#endif

#ifdef linux
    printf("In Linux");
#endif

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

通常所有工具链都有自己的预定义宏,因此您需要使用这些宏来检测这是哪个操作系统.

此类预定义宏的列表.

http://sourceforge.net/p/predef/wiki/OperatingSystems/


是的旁注,这里使用编译时宏来检测操作系统.所以根据工具链,相应的宏的定义将在构建中进行.

要在运行时检测操作系统版本,就像在java中一样

System.getProperty("os.name")
Run Code Online (Sandbox Code Playgroud)

在C/C++中,我们没有任何API.


在使用' uname '的POSIX系统中,我们可以获得操作系统名称.


Ste*_*enG 5

有这个方便的列表(将其保存到磁盘!)。预定义的编译器宏列表。

我还建议,如果您要针对多个平台,请寻找已经可用于它们的库。