C++ 中#define 的 Ada 等价物是什么?

What is the Ada equivalent of #define in C++?

我是 Ada 的新手,据我在互联网上的探索,我无法找到与此 C++ 概念类似的东西。

假设我有 package_name.data_member(各种包中的多个变量)。我希望将其缩短为更 reader 友好的方式,如下所示(不使用 Use 关键字),因为这些变量将在同一文件中多次使用 -

#define A package_name.data_member
#define B package_name.data_member
...

有什么方法可以在 Ada 中完成上述操作吗?

在这种情况下你需要一个对象重命名声明(ARM 8.5.1):

A : Data_Member_Type renames Package_Name.Data_Member;

如果您使用的是 GNAT,它包含一个工具 gnatprep;与 cpp 的主要区别在于

  • 要替换的符号必须在源文本中标记,例如$foo$不在Ada源字符集中),
  • 替换只能在单独的定义文件中定义(或者例如 -Dfoo=bar 在命令行中)。

标准 Ada 中没有#define(或任何预处理)的精确模拟(尽管如果需要,您可以使用宏预处理器),但为此使用重命名声明应该适合:

A : Atype 重命名 package_name.data_memberA;

B : Btype 重命名 package_name.data_memberB;

与#define 相比,它的优势在于标记 A 和 B 不会在意想不到的地方被它们的 #defines 错误地替换。