На языке программирования C все языковые версии, с которыми я работал, с принудительной декларацией переменных перед тем, как будут оцениваться любые не декларативные/присваивающие выражения. С++, похоже, отказался от этого требования со всех версий. Я также признаю, что более современная версия C также отказалась от этого требования, но я пока не использую ни один из этих стандартов.
У меня есть вопрос: Какая историческая причина заключалась в том, чтобы препятствовать тому, чтобы язык C свободно декларировался по требованию, а не спереди?
Очевидно, есть ряд причин, которые приходят на ум с технической точки зрения, но никто из них не кажется мне особенно правдоподобным.
- Предотвращение возникновения непонятной поведенческой ошибки компилятора (например, бесконечные петли синтаксического анализа, массивный всплеск памяти для оценки или некоторые странные угловые случаи с макросами.)
- Предотвращение нежелательного вывода компилятора. Это может быть что угодно: от выхода символа, путающего процесс отладки и простоты разработки средств отладки, до неожиданных заказов хранения стека.
- читабельность. Мне также трудно это усвоить, поскольку C, хотя и рассчитан на удобочитаемость по сравнению с другими языками той эпохи, не применял этот тип структуры почти нигде. (Если вы не видите, что прототипирование является аналогичным исполнением, но если я вспомню, что прототипы были добавлены в спецификации "89".)
- Сложность реализации и практические причины. Это тот, на кого я склонен верить. В качестве инженеров мы должны сделать определенные соображения, чтобы отправить жизнеспособный продукт за определенный промежуток времени. Хотя я дам, что профессиональный ландшафт для компьютерных наук и разработки программного обеспечения резко изменился, бизнес по-прежнему является бизнесом. В конце дня я уверен, что Bell хочет готовый продукт, который можно использовать в среде программирования Unix, чтобы продемонстрировать, что они достигли.
Есть ли у кого-нибудь хорошие источники, поддерживающие любой из вышеперечисленных? Я что-то пропустил? Мы можем спекулировать с рассвета до заката, но я ищу хорошие ссылки.