1
6
你的问题的答案是不,Ada没有内置于语言中的预处理器。这意味着每个编译器可能有也可能没有一个,并且没有用于预处理和条件编译之类的“统一”语法。这是故意的:它被认为是“有害”的艾达精神。 几乎总是有办法解决缺少预处理器的问题,但通常情况下,解决方案可能有点麻烦。例如,您可以将特定于平台的函数声明为“separate”,然后使用构建工具编译正确的函数(项目系统、使用pragma body replacement或非常简单的目录系统…将所有Windows文件放在/windows/中,将所有Linux文件放在/linux/中,并包括平台的相应目录)。 尽管如此,Gnat意识到有时候你需要一个预处理器,并创建了Gnatprep。不管编译器是什么,它都可以工作(但是您需要将它插入到您的构建过程中)。同样,对于简单的事情(如条件编译),您可能只需要使用C预处理器,甚至可以使用自己的非常简单的预处理器。 |
2
4
|
3
3
除了CPP预处理器或M4,不能在命令行上的任何文件上调用,也可以使用诸如make或ant之类的构建工具调用。我建议给你的.ada打个电话,再打些别的。我已经在Java文件上做了一段时间。我调用Java文件.M4,并使用make规则创建.java,然后以正常方式构建它。 希望有帮助。 |
4
2
一些旧的ADA1983时代的编译器有一个名为A.app的包,它使用ADA的前缀子集(在构建时解释)作为生成ADA的预处理语言(然后在编译时翻译为机器代码)。Rational的VerdixADA开发系统(VADS)似乎是几个ADA编译器中A.app的前身。例如,Sun Microsystems从vads派生了ada sparcompiler,因此也有一个.app。这与使用pl/i作为pl/i的预处理器没有什么不同,IBM就是这样做的。 第2章是关于a.app的一些文档: http://dlc.sun.com/pdf/802-3641/802-3641.pdf |
5
1
不,不是。 如果你真的想要一个,有办法得到一个(使用C的,使用一个独立的,等等),但是我会反对它。没有这样的设计决策是有目的的。预处理器的整个概念是非常不适合的。 C的预处理器的大部分功能都可以在ADA中以其他更可靠的方式完成。唯一的主要例外是对跨平台支持的源文件进行较小的更改。考虑到在一个典型的跨平台C程序中,这被滥用了多少,我仍然很高兴在ADA中没有对它的支持。很少有C/C++开发人员能够足够地控制自己,使更改保持“次要”。这个结果可能有效,但对于一个人来说几乎不可能阅读。 实现这一点的典型ADA方法是将不同的代码放在不同的文件中,并使用构建系统在编译时在它们之间进行某种选择。make足够强大,可以帮助您做到这一点。 |
6
1
是的,它有。
如果您使用的是gnat编译器,则可以使用
在这种情况下,您可以使用
例如,当您需要使用甚至不同的交叉编译器为几个不同的操作系统编译相同的代码时,这非常有用。 |
itMaxence · 从c库调用objective-c方法 7 年前 |
seladb · Makefile-目录不存在时失败-跨平台 7 年前 |
Ryan · 调整StackLayout元素的高度 7 年前 |
Sergei G · C printf跨平台格式,无警告[重复] 7 年前 |