Ada相当于C / C ++中的局部静态变量

时间:2013-05-05 11:42:35

标签: ada

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

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

C ++:

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

阿达:??

1 个答案:

答案 0 :(得分:10)

包级变量。

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

如果我对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;