我需要我的代码根据它被编译的操作系统做不同的事情。我在寻找这样的东西:
#ifdef OSisWindows
// do Windows-specific stuff
#else
// do Unix-specific stuff
#endif
有办法做到这一点吗?有没有更好的方法来做同样的事情?
我需要我的代码根据它被编译的操作系统做不同的事情。我在寻找这样的东西:
#ifdef OSisWindows
// do Windows-specific stuff
#else
// do Unix-specific stuff
#endif
有办法做到这一点吗?有没有更好的方法来做同样的事情?
当前回答
我在这里没有找到俳句的定义。总的来说,Haiku-os的定义很简单__HAIKU__
其他回答
没有根据C标准设置的标准宏。一些C编译器会在某些平台上设置一个宏(例如,苹果打了补丁的GCC设置了一个宏,以指示它正在苹果系统上编译,并用于Darwin平台)。你的平台和/或C编译器也可以设置一些东西,但没有通用的方法。
就像hayalci说的,最好在构建过程中设置这些宏。用大多数编译器定义宏是很容易的,而不需要修改代码。您可以简单地将-D MACRO传递给GCC,即。
gcc -D Windows
gcc -D UNIX
在你的代码中:
#if defined(Windows)
// do some cool Windows stuff
#elif defined(UNIX)
// do some cool Unix stuff
#else
# error Unsupported operating system
#endif
你可以在编译时使用预处理器指令作为警告或错误检查,你根本不需要运行这个程序,只是简单地编译它。
#if defined(_WIN32) || defined(_WIN64) || defined(__WINDOWS__)
#error Windows_OS
#elif defined(__linux__)
#error Linux_OS
#elif defined(__APPLE__) && defined(__MACH__)
#error Mach_OS
#elif defined(unix) || defined(__unix__) || defined(__unix)
#error Unix_OS
#else
#error Unknown_OS
#endif
#include <stdio.h>
int main(void)
{
return 0;
}
很抱歉外部的参考,但我认为它适合你的问题:
C/ c++提示:如何使用编译器预定义的宏检测操作系统类型
我写了一个小的库来获取你所使用的操作系统,它可以使用clib (C包管理器)安装,所以将它作为项目的依赖项使用非常简单。
安装
$ clib install abranhe/os.c
使用
#include <stdio.h>
#include "os.h"
int main()
{
printf("%s\n", operating_system());
// macOS
return 0;
}
它返回一个字符串(char*)与您正在使用的操作系统的名称,有关这个项目的进一步信息,请查看Github上的文档。
总结一下,这里有一些有用的链接。
GCC通用预定义宏 预定义的操作系统 MSDN预定义宏 多链接的NaudeaSoftware页面 维基百科! SourceForge的“用于标准、编译器、操作系统和硬件架构的预定义编译器宏的概述。” FreeBSD的“差异化操作系统” 各种预定义宏 libportable