Patrząc z innej perspektywy to zmienne globalne można podzielić na 4 grupy pod względem możliwości ich użycia. Najmniejszy zakres mają zmienne poprzedzone słowem static zadeklarowane w środku funkcji. Ich wartość nie zmienia się między wywołaniami, ale możesz się do nich odwołać tylko z tych funkcji.
Następnie są zmienne static zadeklarowane w jednej jednostce kompilacji (zwykle 1 plik C++) poza funkcjami. Mogą się do niej odwoływać wszystkie funkcje z danej jednostki.
Można także zadeklarować zmienną static w klasie, wtedy dostęp jest zdeterminowany tak, jak inne właściwości klasy, tzn. private, protected i public.
Na koniec są właściwe zmienne globalne, można się do nich odwołać w każdym miejscu programu, w C nawet program się skompiluje, jak nie będzie miał dodanego nagłówka z deklaracją takiej zmiennej i nawet jakimś cudem będzie działał, jeżeli ta zmienna jest typu int (nie polecam używania tego). Deklaruje się je poza funkcjami, najczęściej w pliku nagłówkowym, dodając przedrostek extern. Zmienna taka musi być zdefiniowana w jednej i tylko jednej jednostce kompilacji.