переменные могут быть установлены случайным образом при объявлении их снова? - PullRequest
2 голосов
/ 15 марта 2012

В моем методе я объявляю некоторые переменные, включая int blockCount;.Я называю этот метод более одного раза.Используя отладчик Xcode, я обнаружил, что после второго вызова метода значение blockCount было установлено равным 364265, а значение 2 - всего несколькими миллисекундами ранее.

Это не реальная проблема, так как я могу просто установить его на 0 или любое другое число, которое мне нравится, но разве это плохая привычка программирования - снова и снова объявлять определенную переменную?Я довольно новичок в программировании и хочу убедиться, что все делаю правильно.:)

1 Ответ

7 голосов
/ 15 марта 2012

Если вы объявляете переменную, но не указываете ее значение, она считается «неинициализированной». Неинициализированная переменная в C имеет неопределенное значение - обычно это мусор, содержащий то, что произошло по этому адресу в последний раз, когда что-то было записано там. Строго говоря, «неопределенный» означает, что вы ни при каких обстоятельствах не должны пытаться использовать это значение. (Если вы выполните поиск «носовых демонов», это будет объяснено довольно красочными, а также полезными терминами. *)

Эта переменная, будучи локальной, создается заново при каждом запуске метода и, таким образом, получает новое фактическое , хотя технически неопределенное значение при каждом проходе.

Обычно рекомендуется не оставлять переменные неинициализированными, потому что «случайное» значение может вызвать ошибки, которые трудно найти, и иногда вызывает вышеупомянутых носовых демонов. Вы не делаете ничего плохого, но если вы не устанавливаете фактическое значение в одной или двух строках объявления, я бы посоветовал установить значение 0 или какое-то разумное значение по умолчанию:

int blockCount = 0;

* См. Также: Что происходит с объявленной неинициализированной переменной в C? Имеет ли оно значение?

...