9

我来自嵌入式系统上的 C/C++,并且一直在我们使用静态变量的函数内部,以便在整个调用过程中保留该值。

在 Ada 中,这似乎只使用等效的文件级静态变量来完成。是否有 Ada 等价物。

C++:

function Get_HW_Counter() {
   static int count = 0;
   return ++count;
}

阿达:???

4

1 回答 1

11

包级变量。

请注意,包不一定在文件级别;如果您愿意,您甚至可以创建和使用子程序本地的包。包的一种用途是创建一个对象和作用于它的所有方法(单例模式);将对象的所有细节保密。

如果我对 C++ 的理解不是太生疏,那么一个近似的等价物是:

package HW_Counter is
   function Get_Next;
private
   count : natural := 0; -- one way of initialising
   -- or integer, allowing -ve counts for compatibility with C++
end HW_Counter;

这就是包裹的客户需要看到的所有内容。

package body HW_Counter is

   function Get_Next return natural is
   begin
      count := count + 1;
      return count;
   end Get_Next;

begin  -- alternative package initialisation part
   count := 0;
end HW_Counter;

用法通常是

   C := HW_Counter.get_next;
于 2013-05-05T12:08:39.037 回答