C - 了解操作系统类型

时间:2017-06-29 12:48:37

标签: c operating-system runtime

C中是否有某种方法可以确定运行该程序的操作系统类型? 我必须这样做,因为我必须根据操作系统运行特定的系统调用。

if(OS == OSX)
   system("open graph.dot");
els if(OS == LINUX)
   system("xdg-open graph.dot")

我尝试使用此代码:

#ifdef defined(__APPLE__) && defined(__MACH__)
    system("open graph.png");
#endif

#ifdef defined(__WINDOWS__)
   system("start graph.png");
#endif

#ifdef defined(__linux__)
   system("xdg-open graph.png");
#endif

但我有这个警告:

  

警告:#ifdef指令结束时的额外令牌

1 个答案:

答案 0 :(得分:3)

当然,有一些特定于平台的方法可以找到有关操作系统的信息,但这不是你想要的。由于您的二进制文件仅适用于编译它的系统,因此确定 build 系统中的系统(如Makefile或构建程序的脚本),例如使用-D编译器选项。编译OSX时可以添加-DOSX,然后可以使用

等条件编译
#ifdef OSX
// code for OSX
#endif

请注意,可以直接检查窗口,因为Windows的编译器始终定义_WIN32,因此您只需使用

#ifdef _WIN32
// code for windows
#endif

没有自己明确设置定义。

还有更高级的可能性,例如为不同的系统提供不同的源文件,但这更像是关于或用于构建项目的任何问题。