Обычно я рекомендую инициализировать переменные, когда они определены, если значение, которое они должны иметь, известны, и оставить переменные неинициализированными, если значение не известно. В любом случае, поместите их настолько близко к их использованию, насколько позволяют правила области видимости.
Вместо этого им следует присвоить значение по умолчанию непосредственно перед их использованием.
Обычно вам вообще не следует использовать значение по умолчанию. В C99 вы можете смешивать код и объявления, поэтому нет смысла определять переменную, прежде чем присваивать ей значение. Если вы знаете значение, которое оно должно принимать, то нет смысла иметь значение по умолчанию.
Кроме того, было также упомянуто, что C99-совместимые компиляторы теперь выдают предупреждение в вышеупомянутом случае.
Не для того случая, который вы показываете - вы не получите предупреждение за наличие int x = 0;
. Я сильно подозреваю, что кто-то перепутал это. Компиляторы предупреждают, если вы используете переменную без присвоения ей значения, и если у вас есть:
... some code ...
int x;
if ( a )
x = 1;
else if ( b )
x = 2;
// oops, forgot the last case else x = 3;
return x * y;
тогда вы получите предупреждение, что x может использоваться без инициализации, по крайней мере, с помощью gcc.
Вы не получите предупреждение, если назначите значение для x
до if
, но не имеет значения, выполняется ли присвоение как инициализатор или как отдельный оператор.
Если у вас нет особых причин назначать значение дважды для двух ветвей, нет смысла назначать значение по умолчанию для x первым, так как это останавливает компилятор, предупреждающий вас о том, что вы закрыли каждую ветвь.