如何根据我的操作系统包含不同的标题? 我正在编写一个便携式C++应用程序。如何根据其运行的操作系统包含不同的头文件。在C++中有没有这样的方法,或者我必须使用构建系统吗?

如何根据我的操作系统包含不同的标题? 我正在编写一个便携式C++应用程序。如何根据其运行的操作系统包含不同的头文件。在C++中有没有这样的方法,或者我必须使用构建系统吗?,c++,cross-platform,portability,multiplatform,C++,Cross Platform,Portability,Multiplatform,带有预处理器: #ifdef _SUNOS //code #elseif _LINUX //code #elseif _HPUX //code #elseif _WIN32 //code #else #error OS not supported #endif 我们在Linux(Red Hat Enterprise 5)、Sun(Solaris)和Windows上开发。我们的系统将使用如下内容: #ifndef MSWINDOWS #include <unistd.h> #else

带有预处理器:

#ifdef _SUNOS
//code
#elseif _LINUX
//code
#elseif _HPUX
//code
#elseif _WIN32
//code
#else
#error OS not supported
#endif
我们在Linux(Red Hat Enterprise 5)、Sun(Solaris)和Windows上开发。我们的系统将使用如下内容:

#ifndef MSWINDOWS
#include <unistd.h>
#else
#include <winbase.h>
#endif
//More includes here
#ifndef MSWINDOWS
#包括
#否则
#包括
#恩迪夫
//更多包括在这里

我将使用预处理器指令和跨平台构建系统,如。你可以做:

#ifdef LINUX
#include <unistd.h>
#elif defined(WINDOWS)
#include <algorithm.h>
# elif Defined(MAC_OSX)
//... etc.
#else
#error No operating system defined
#endif
#ifdef LINUX
#包括
#已定义的elif(WINDOWS)
#包括
#定义的elif(MAC_OSX)
//... 等
#否则
#错误:未定义操作系统
#恩迪夫

然后将相应的预处理器标志添加到构建中,例如:
-DLINUX

我认为这是一个好主意。最近,我尝试使用编译器使用的定义来实现这一点,但我放弃了,因为有太多的变体,等等。我发现仅仅使用构建系统设置的我自己的定义就更容易了。谢谢你提醒我,不客气。但是请在构建系统中这样做,它将使您的软件更好地维护。如果模块不能以独立于平台的方式编写(它们通常可以,特别是使用Boost或Qt之类的库),那么在操作系统设施上设计您自己的抽象,并多次实现。所有这些都是很好的答案。很抱歉,如果我说的是显而易见的,但请记住,一般来说,支持跨平台的标题和库是一个好主意。任何时候,只要有你需要的,问问自己为什么要选择一个替代品。我正在处理alsa、winmm和coreaudio库。我曾考虑过使用类似portaudio的东西,但对于我的用例来说,这太过分了。