2012-06-07 20 views

Odpowiedz

7

Nie!
Zmienne globalne i statyczne są inicjowane w sposób niejawny, jeśli kod nie robi tego wyraźnie, zgodnie z nakazem standardu C.
W skrócie, zmienne globalne i statyczne nigdy nie są niezainicjowane.

+0

Tak domyślnie. Chcę, aby zostały zainicjowane jawnie. Każdy analizator statyczny również powinien być w porządku. – Kamath

+0

@AUZKamath: Nie. Od kiedy standard już zezwala na globalne warianty jako domyślne, zainicjowane gcc nie zapewnia ostrzeżeń ani diagnostyki niezainicjowanych globalnych zmiennych. –

3

Nie, ponieważ gcc automatycznie inicjuje wszystkie zmienne globalne i statyczne na "0".

5

6.9.2 zewnętrzne Definicje obiektów

Semantyka

Jeśli deklaracja z identyfikatorem obiektu ma zasięg pliku i inicjatora, deklaracja jest zewnętrznym definicja dla identyfikatora.

Deklaracja z identyfikatorem obiektu, który ma złożyć zakres bez inicjatora i bez specyfikacją pamięci masowej klasy lub ze specyfikacją pamięci masowej klasy statycznej, stanowi wstępną definicję. Jeśli jednostka tłumaczeniowa zawiera jedną lub więcej wstępnych definicji dla identyfikatora , a jednostka tłumaczeniowa nie zawiera zewnętrznej definicji tego identyfikatora, wówczas zachowanie jest dokładnie takie, jak gdyby jednostka tłumaczeniowa zawierała deklarację zakresu pliku o tym identyfikatorze , z typ kompozytu na koniec jednostki tłumaczeniowej, a inicjator równa 0.

Powyższe dwie klauzule (od standardu) zagwarantuje pliku-Scope (globalne) obiekty są zawsze zainicjowany.