添加预处理器#define来更改包含哪些头文件以及调用哪些函数

Adding a preprocessor #define to change which headers are included and which functions are called

本文关键字:文件 调用 函数 包含哪 处理器 预处理 #define 添加      更新时间:2023-10-16

我正在为Sega Dreamcast和Windows开发游戏引擎。我已经在Dreamcast硬件上实现了自己的库,这与PC上的OpenGL几乎是一样的。现在,我想将两个构建合并到一个项目中,这样我就不需要开发不同的项目来做完全相同的高级内容。

我知道你可以添加这样的预处理行:#define DREAMCAST,然后DREAMCAST头将被包括在内,适当的低级函数将被调用,而不是OpenGL。以前有人这样做过,但我不知道如何使之成为可能。

这真的和Dreamcast没有关系,它可能是Mac, Linux或其他什么。我对每个平台都有不同的编译器。因此,当#define DREAMCAST时,我希望g++ KOS编译器包含特定于DREAMCAST的头文件和类。如果#define DREAMCAST不存在,我希望MingGW包含Windows OpenGL头文件和类。

我该怎么做?

对于根据预定义符号包含不同版本的初始问题,有一个简单的解决方案:

#if defined(DREAMCAST)
#include <my_dreamcast_header>
#else
#include <opengl_header>
#endif

这个功能应该在任何C或c++编译器上都是可用的——MinGW上绝对是这样。当然,您仍然需要自己调用正确的编译器,因为一旦编译开始,就无法更改编译器。