我来自嵌入式系统上的C/C++,而且始终在函数内部使用静态变量,以便在整个调用过程中保留该值。
在Ada中,似乎只用等效于文件级静态变量的方式完成此操作。有相当于Ada的内容吗?
C++:
function Get_HW_Counter() {
static int count = 0;
return ++count;
}
艾达:??
最佳答案
程序包级别的变量。
请注意,程序包不一定是文件级别的。您甚至可以根据需要创建和使用子程序本地的包。包的一种用法是创建一个对象以及作用于该对象的所有方法(单一模式)。将对象的所有详细信息保密。
如果我对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/C++中的局部静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16384161/