我来自嵌入式系统上的C / C ++,并且我们在函数内部一直使用静态变量,以便在整个调用过程中保留该值。
在Ada中,似乎只能使用等效的文件级静态变量。是否有Ada等价物。
C ++:
function Get_HW_Counter() {
static int count = 0;
return ++count;
}
阿达:??
答案 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;