Старайтесь сдвинуть ошибки с этапа выполнения на этап компиляции
Неинициализированные переменные — по сути ошибки, ждущие своего часа. Вы всегда должны инициализировать переменную при ее объявлении. В Си++ инициализация во время объявления возможна всегда, потому что объявление может проводиться везде, где можно поместить оператор; просто откладывайте объявление до тех пор, пока у вас не будет достаточно информации для объявления в произвольном месте с инициализацией переменной. Таким образом, если вы попытаетесь использовать эту переменную преждевременно, то получите ошибку на этапе компиляции ("переменная не найдена") вместо ошибки во время выполнения.
В Си вы можете объявлять переменную после любой открытой фигурной скобки, поэтому вы можете часто откладывать объявление на некоторое время, но при этом у вас в распоряжении нет гибкости Си++. В самом крайнем случае инициализируйте переменную таким значением, которое в ответ на него понятным образом вызовет в подпрограмме аварию; не присваивайте переменной произвольное значение — оно может быть принято в программе за имеющее смысл. Например, указатель, инициализированный значением NULL, более надежен, чем имеющий произвольное значение, которое может оказаться существующим адресом.
С другой стороны, хорошо иметь все объявления переменных в одном месте в начале блоке так, чтобы вы могли их легко найти. Если ваша подпрограмма достаточно мала, то вы обычно можете сделать и то, и другое. Например, вы можете разделить подпрограмму на части для того, чтобы переместить объявления в начало блока, чтобы вам их было легче найти. Подпрограмма, подобная следующей:
f()
{
// код, который не использует переменную i
int i = init_val;
// код, который использует переменную i
}
может быть разделена следующим образом:
f()
{
// код, который не использует переменную i
g( init_val );
}
g( int init_val )
{
int i = init_val;
// код, который использует переменную i
}
Переменная-счетчик общего назначения, которая инициализируется в начале цикла for, является очевидным исключением из этого правила§. Иногда использование слишком большого количества подпрограмм может вызвать больше проблем, чем решить их, и в этом случае лучше выбрать внутренние объявления. Используйте свою голову.