/ / G ++ 4.4 „niezainicjowane” zmienne - c ++, g ++, inicjalizacja

G ++ 4.4 "niezainicjowane" zmienne - c ++, g ++, inicjalizacja

Używam g ++ na Ubuntu 10.10 (64-bit), jeśli system operacyjny jest w ogóle istotny dla tej sprawy. Widziałem coś dziwnego, więc postanowiłem sprawdzić i z jakiegoś powodu ten kod

#include <iostream>

int main()
{
int a;

std::cout << a << std::endl;

return 0;
}

zawsze drukuje 0. Oczywiście g ++ wykonuje automatyczną inicjalizację niezainicjowanych zmiennych na odpowiadającą im wartość null. Chodzi o to, że chcę wyłączyć tę funkcję, a przynajmniej sprawić, że g ++ pokaże ostrzeżenie o używaniu niezainicjowanych zmiennych, ponieważ w ten sposób mój kod nie działa dobrze, na przykład podczas kompilacji na VS. Poza tym jestem całkiem pewien, że standard C ++ określa że zmienna, która nie jest domyślnie zainicjowana jakąś wartością, ma niezdefiniowaną wartość wśród wszystkich możliwych wartości, które w rzeczywistości powinny być różne przy każdym wykonaniu programu, ponieważ różne części pamięci operacyjnej są używane za każdym razem, gdy jest to używane. s wykonane.

Jawne pytanie: czy istnieje sposób, aby g ++ wyświetlał ostrzeżenia dla niezainicjowanych zmiennych?

Odpowiedzi:

7 dla odpowiedzi № 1

GCC nie inicjuje niezainicjowanych zmiennych na 0. To tylko przypadek a jest 0.

Jeśli chcesz otrzymywać ostrzeżenia, gdy używasz niezainicjowanych zmiennych, możesz użyć opcji GCC -Wuninitialized (wliczone również przez -Wall).

Jednak „nie można statycznie dostrzec żadnego możliwego użycia niezainicjowanych zmiennych: będziesz potrzebował narzędzi do uruchamiania w celu wykrycia tego i tam jest valgrind dla tego.


1 dla odpowiedzi nr 2

Możesz także spróbować użyć narzędzia takiego jak cppcheck. Ogólnie rzecz biorąc, w dobrze napisanym C ++ rzadko istnieje powód do deklarowania zmiennej bez jej inicjowania.