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 错误地替换。
我是 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 错误地替换。