Ada C/C++;

Ada C/C++;,ada,Ada,我来自嵌入式系统上的C/C++,在函数中我们一直使用一个静态变量,以便在整个调用中保留该值 在Ada中,这似乎只能通过等效的文件级静态变量来实现。是否有Ada等效物 C++: Ada:?包级别变量 注意,包不一定是文件级的;如果愿意,您甚至可以创建和使用子程序的本地包。包的一个用途是创建一个对象和作用于它的所有方法(单例模式);将对象的所有详细信息保持为私有 如果我对C++的理解不是太生疏,那么一个相近的等价物是: package HW_Counter is function Get_Ne

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

在Ada中,这似乎只能通过等效的文件级静态变量来实现。是否有Ada等效物

C++:


Ada:?

包级别变量

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

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

您可以在子程序的本地创建一个包,但它会在每个条目上进行详细说明(因此任何变量都会重新初始化)。实际上,在重读这个问题时,我认为这些变量正好相当于文件级静态变量。所以,不,我不相信有一个Ada等价于C。但是,要获得同样的效果并不难,如果有点令人厌烦的话。在Ada 2012中,你甚至不需要一个包体,你可以在私有部分使用一个表达式函数来实现访问器。Shark8,我不这么认为?你怎么得到增量?他说静态。。。该死的,它是静电的开个玩笑你完全正确,忘了。。。但是访问可以在规范中完成。
   C := HW_Counter.get_next;