是否可以在 C++ 中检测操作系统?

is it possible to detect operating system in c++?

我正在使用 CentOS,并尝试将 perl 代码转换为 C++。在 perl 中,我们可以使用

检测操作系统
$^O or we can print: print "S^O";
o/p: linux

我们在 C++ 中有任何函数可以完成这项工作。 提前致谢。

一般有两种方式:

  • OS 通过宏嗅探
    例如。如果定义了 WIN32 那么你在 Windows.

  • Header 搜索路径。
    必须为每个平台构建一个 C++ 程序。只需定义 header 搜索路径,以便找到平台的相关 header 版本。

对于 OS 嗅探检查 the macro list at SourceForge(据我所知,那里只有一个这样的项目)。

@Joachim Pileborg 感谢您的建议...对于 uname 系统调用...从以下代码我可以获得系统信息。

 #include <stdio.h>
 #include <stdlib.h>
 #include <errno.h>
 #include <sys/utsname.h>

int main(void) {

 struct utsname buffer;

 errno = 0;
 if (uname(&buffer) != 0) {
  perror("uname");
  exit(EXIT_FAILURE);
}

 printf("system name = %s\n", buffer.sysname);
 printf("node name   = %s\n", buffer.nodename);
 printf("release     = %s\n", buffer.release);
 printf("version     = %s\n", buffer.version);
 printf("machine     = %s\n", buffer.machine);

 return EXIT_SUCCESS;
}