pax*_*977 3 cross-platform ada
要在C/C++中支持多个平台,可以使用预处理器来启用条件编译.例如,
#ifdef _WIN32
#include <windows.h>
#endif
Run Code Online (Sandbox Code Playgroud)
你怎么能在Ada做到这一点?Ada有预处理器吗?
你的问题的答案是否定的,Ada没有内置于该语言的预处理器.这意味着每个编译器可能有也可能没有,并且没有用于预处理和条件编译之类的"统一"语法.这是故意的:它被认为是对Ada精神的"有害".
几乎总有办法解决缺乏预处理器的问题,但解决方案往往有点麻烦.例如,您可以将平台特定的函数声明为"单独",然后使用构建工具来编译正确的函数(项目系统,使用pragma正文替换或非常简单的目录系统...放置所有Windows文件在/ windows /和/ linux /中的所有linux文件中包含适用于该平台的目录).
总而言之,GNAT意识到有时你需要一个预处理器并创建了gnatprep.无论编译器如何,它都应该工作(但是您需要将它插入到构建过程中).同样,对于简单的事情(如条件编译),你可以只使用c预处理器,甚至可以使用非常简单的预处理器.