这是编写跨平台程序时很常见的问题。
有时,库可以提供您需要的抽象。例如,Boost有一个文件系统库,可以在多个平台上使用完全相同的代码枚举文件、操作目录等。
此外,通常定义的符号允许您检测当前正在构建您的代码的编译器。即使没有一个可以满足您的需求,您也可以定义自己的。
假设您需要为名为 FooOS 和 BarOS 的两种不同的虚构操作系统构建您的软件。我要发明两个符号,FOO_OS
和BAR_OS
。在我的代码中,我可以这样做:
#ifdef FOO_OS
#include <foo_stuff.h>
#elseif BAR_OS
#include <bar_stuff.h>
#endif
void do_something()
{
#ifdef FOO_OS
do_it_this_way();
#elseif BAR_OS
do_it_that_way();
#endif
}
现在,我们只需要定义FOO_OS
或BAR_OS
。这可以通过 IDE 的项目配置或编译器的命令行来完成。使用 Google 来了解您的具体情况,因为您没有在帖子中包含这些详细信息。
当您编译通过源代码并应用这些条件语句的代码时,有一个预处理步骤。下面的传递实际上编译了代码。例如,这里有一些关于 Visual Studio 预处理器的文档。