Ada有预处理器吗?

pax*_*977 3 cross-platform ada

要在C/C++中支持多个平台,可以使用预处理器来启用条件编译.例如,

#ifdef _WIN32
  #include <windows.h>
#endif
Run Code Online (Sandbox Code Playgroud)

你怎么能在Ada做到这一点?Ada有预处理器吗?

Lou*_*ndy 7

你的问题的答案是否定的,Ada没有内置于该语言的预处理器.这意味着每个编译器可能有也可能没有,并且没有用于预处理和条件编译之类的"统一"语法.这是故意的:它被认为是对Ada精神的"有害".

几乎总有办法解决缺乏预处理器的问题,但解决方案往往有点麻烦.例如,您可以将平台特定的函数声明为"单独",然后使用构建工具来编译正确的函数(项目系统,使用pragma正文替换或非常简单的目录系统...放置所有Windows文件在/ windows /和/ linux /中的所有linux文件中包含适用于该平台的目录).

总而言之,GNAT意识到有时你需要一个预处理器并创建了gnatprep.无论编译器如何,它都应该工作(但是您需要将它插入到构建过程中).同样,对于简单的事情(如条件编译),你可以只使用c预处理器,甚至可以使用非常简单的预处理器.


Mar*_*c C 5

AdaCore提供了专门用于Ada 的gnatprep预处理器。他们指出,gnatprep“不依赖于任何特殊的GNAT功能”,因此听起来好像它应该与非GNAT Ada编译器一起使用。他们的用户指南还提供了一些条件编译建议

我一直在使用m4的项目中,Ada规范和主体文件分别后缀为“ .m4s”和“ .m4b”。

我的偏爱实际上是完全避免进行预处理,而只是使用专门的机构,设置CM和构建过程来对其进行管理。