2017-06-29 75 views
-1

有一些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

'系统()'被** **未A *系统调用* –

+0

通常,编译器的目标OS由编译器常数确定。将'#ifdef's用于编译该操作系统的代码(在其中使用正确的系统调用)。 –

+0

一个人通常在* build *时间处理这类问题,而不是*运行*时间。毕竟,为Linux构建的二进制文件通常不会在OSX上运行(更直接),或者更普遍的情况是,在除Linux以外的任何操作系统上运行。 –

回答

3

有当然,特定于平台的方式可以查找有关操作系统的信息,但这不是您想要的。当你的二进制文件将只被编译为系统正常工作,确定系统在构建系统(如Makefile或脚本构建程序),例如使用-D编译器选项设置一些定义。编译为OSX时,您可以添加-DOSX,然后你可以使用条件编译这样的窗户可以直接检查

#ifdef OSX 
// code for OSX 
#endif 

注意,因为Windows编译器总是定义_WIN32,所以你可以只使用

#ifdef _WIN32 
// code for windows 
#endif 

没有明确地定义自己的定义。

有更多高级的可能性,例如针对不同的系统有不同的源文件,但这更多的是关于或您用于构建项目的任何问题。

+0

我编译时有一个警告。我只是编辑帖子 – nomeNano