2013-05-05 12 views
9

Pochodzę z C/C++ na systemach wbudowanych i przez cały czas w funkcji używamy zmiennej statycznej, dzięki czemu wartość jest zachowywana przez cały czas trwania połączeń.Ada, odpowiednik lokalnej zmiennej statycznej z C/C++

W Ada wygląda na to, że robi się to tylko z odpowiednikami statycznych zmiennych na poziomie pliku. Czy istnieje odpowiednik Ada?

C++:

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

Ada: ??

Odpowiedz

10

Zmienne na poziomie pakietu.

Należy pamiętać, że pakiety nie muszą znajdować się na poziomie pliku; możesz nawet utworzyć i użyć pakietu lokalnego do podprogramu, jeśli chcesz. Jednym z zastosowań pakietu jest stworzenie obiektu i wszystkich działających na nim metod (wzór singletonowy); zachowanie wszystkich szczegółów obiektu jako prywatnych.

Jeśli moja znajomość C++ nie jest zbyt zardzewiałe, bliski odpowiednik byłoby:

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; 

i to wszystko klient pakietu potrzebuje zobaczyć.

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; 

i użytkowania będzie typowo

C := HW_Counter.get_next; 
+0

Można utworzyć pakiet lokalny do podprogramu, ale to się opracowane na każdym wejściu (więc wszelkie zmienne będą ponownie zainicjowane). –

+0

Właściwie, po ponownym przeczytaniu pytania, uważam, że są one dokładnie równoważne zmiennym statycznym na poziomie pliku. Więc nie, nie wierzę, że istnieje odpowiednik C. To nie jest takie trudne, jeśli trochę bardziej męczące. –

+0

W Ada 2012 nie potrzebujesz nawet korpusu pakietu, w którym możesz użyć funkcji-wyrażenia w sekcji prywatnej w celu implementacji akcesora. – Shark8

Powiązane problemy