G ++ 4.4 «неинициализированные» переменные - PullRequest
2 голосов
/ 20 января 2011

Я использую g ++ в Ubuntu 10.10 (64-битная версия), если операционная система вообще имеет отношение к делу.Я увидел что-то странное, поэтому я решил проверить, и по какой-то причине этот код

#include <iostream>

int main()
{
    int a;

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

    return 0;
}

всегда печатает 0. Очевидно, что g ++ автоматически инициализирует неинициализированные переменные с их соответствующим нулевым значением.Дело в том, что я хочу отключить эту функцию или, по крайней мере, заставить g ++ показывать предупреждение об использовании неинициализированных переменных, так как мой код не будет хорошо работать, например, при компиляции в VS.Кроме того, я почти уверен, что стандарт C ++ гласит, что переменная, которая неявным образом не инициализируется каким-либо значением, имеет неопределенное значение среди всех возможных значений, которые на самом деле должны отличаться при каждом выполнении программы, поскольку разные частиоперативная память используется каждый раз, когда она выполняется.

Явный вопрос: есть ли способ заставить g ++ показывать предупреждения для неинициализированных переменных?

Ответы [ 2 ]

7 голосов
/ 20 января 2011

GCC не инициализирует неинициализированные переменные равными 0. Это просто случай, когда a равен 0.

Если вы хотите получать предупреждения при использовании неинициализированных переменных, вы можете использовать GCCопция -Wuninitialized (также включена -Wall).

Однако она не может статически определить любое возможное использование неинициализированных переменных: вам понадобятся некоторые инструменты времени выполнения, чтобы определить это, и есть valgrindдля этого.

1 голос
/ 20 января 2011

Вы также можете попробовать использовать такой инструмент, как cppcheck . В общем, в хорошо написанном C ++ редко есть причина объявлять переменную без ее инициализации.

...