C++ 在C/C+中自动检测操作系统+;

C++ 在C/C+中自动检测操作系统+;,c++,c,operating-system,cross-platform,C++,C,Operating System,Cross Platform,有没有办法使用C/C++代码自动检测操作系统?我需要它来运行Linux、Windows甚至Raspberry Pi的跨平台代码。我正在尝试自动检测操作系统,这样我就不会陷入必须请求机器上运行的操作系统作为输入的情况 我在考虑一个类似于验证文件系统结构之类的黑客攻击,我不知道我是否了解一些东西。我过去曾使用下面的代码在linux和windows之间进行检查 #include<stdio.h> int main(int argc, char *argv[]) { #ifdef _WI

有没有办法使用C/C++代码自动检测操作系统?我需要它来运行Linux、Windows甚至Raspberry Pi的跨平台代码。我正在尝试自动检测操作系统,这样我就不会陷入必须请求机器上运行的操作系统作为输入的情况


我在考虑一个类似于验证文件系统结构之类的黑客攻击,我不知道我是否了解一些东西。

我过去曾使用下面的代码在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;
}
同样,在C/C++中,我们没有任何API


在使用“”的POSIX系统中,我们可以获取OS名称

这里有一个方便的列表(保存到磁盘!)。名单


我还建议,如果您的目标是多个平台,请寻找一个已经为他们提供的库。

这一问题的答案实际上取决于您希望通过差异实现什么。通常,正确的做法是像Jeegar Patel所说的那样使用预定义的宏,但在构建系统中检测到这一点,并在POSIX系统上选择正确的编译器等也很有用,如果您是在本地构建的(无交叉编译),您可以在构建命令中使用
uname
。您想要一个二进制文件,可以在多个不同的操作系统上神奇地执行,然后在运行时检测它在哪个操作系统上运行?不可能。我觉得C++可能是你的问题的错误解决方案,不管它可能是什么。这不是OP所要求的自动检测,这是有条件的构建。@ GeoGeand and Re:区别在哪里?@ FUZxxl这里我们在编译时检测OS,而不是运行时间。@ JeigARPATEL,这不是OP想要的方式吗?@ FuZXXL更新了我的答案。因此,在代码中,我们不会执行类似于Os=checkOs()的操作;如果(OS= Windows){它的Windows }否则,(OS= Linux){它的Linux }\BTW,两者都是跨平台的C++库值得研究。
System.getProperty("os.name")