为了支持 C/C++ 中的多个平台,可以使用预处理器来启用条件编译。例如。,
#ifdef _WIN32
#include <windows.h>
#endif
你怎么能在艾达中做到这一点? Ada 有预处理器吗?
您的问题的答案是否定的,Ada 没有内置于该语言中的预处理器。这意味着每个编译器可能有也可能没有,并且没有用于预处理和条件编译之类的“统一”语法。这是故意的:它被认为对 Ada 精神“有害”。
几乎总有办法解决缺少预处理器的问题,但解决方案通常会有点麻烦。例如,您可以将平台特定函数声明为“单独”,然后使用构建工具编译正确的函数(可以是项目系统,使用 pragma body 替换,也可以是非常简单的目录系统......将所有 Windows 文件/windows/ 中的文件以及 /linux/ 中的所有 linux 文件,并包括平台的相应目录)。
话虽如此,GNAT 意识到有时您需要一个预处理器,因此创建了 gnatprep。无论编译器如何,它都应该可以工作(但您需要将其插入到构建过程中)。同样,对于简单的事情(例如条件编译),您可能只需使用 c 预处理器,甚至可以推出自己的非常简单的预处理器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)