Мои мысли (и я раньше ошибался, просто спросите мою жену), что это просто пережиток более ранних воплощений языка.
Ранние версии C не делалипозволяют вам объявлять переменные где угодно в функции, они должны быть вверху (или, может быть, в начале блока трудно вспомнить, потому что я редко делаю это сейчас).
Кроме того, у вас есть понятное желание установить переменную только тогда, когда вы знаете, какой она должна быть.Нет смысла инициализировать переменную чем-то, если следующая вещь, которую вы собираетесь с ней сделать, это просто перезаписать это значение (отсюда и производительность, с которой люди приходят).
Вот почему необходимо разрешают неинициализированные переменные, хотя вы все равно не должны использовать их, прежде чем инициализировать их, и у хороших компиляторов есть предупреждения, сообщающие вам об этом.
В C ++ (ив последующих воплощениях C), где вы можете создать свою переменную в любом месте функции, вам действительно следует создать ее и инициализировать одновременно.Но это было невозможно рано.Вы должны были использовать что-то вроде:
int fn(void) {
int x, y;
/* Do some stuff to set y */
x = y + 2;
/* Do some more stuff */
}
В настоящее время я бы выбрал:
int fn(void) {
int y;
/* Do some stuff to set y */
int x = y + 2;
/* Do some more stuff */
}