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 № 1GCC 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.