Czy istnieje sposób sprawdzenia/ostrzeżenia, czy zmienna globalna nie jest zainicjalizowana za pomocą gcc?gcc, niezainicjowane zmienne globalne
mam go dla zmiennych lokalnych/atomowy „-Wuninitialized”
Czy istnieje sposób sprawdzenia/ostrzeżenia, czy zmienna globalna nie jest zainicjalizowana za pomocą gcc?gcc, niezainicjowane zmienne globalne
mam go dla zmiennych lokalnych/atomowy „-Wuninitialized”
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.
Nie, ponieważ gcc automatycznie inicjuje wszystkie zmienne globalne i statyczne na "0".
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.
Tak domyślnie. Chcę, aby zostały zainicjowane jawnie. Każdy analizator statyczny również powinien być w porządku. – Kamath
@AUZKamath: Nie. Od kiedy standard już zezwala na globalne warianty jako domyślne, zainicjowane gcc nie zapewnia ostrzeżeń ani diagnostyki niezainicjowanych globalnych zmiennych. –