Короткий ответ заключается в том, что вычислительная мощность и ресурсы экспоненциально возрастали между временем, установленным C, и временем, которое Java пришло через 25 лет спустя.
Чем дольше ответ ...
Максимальный размер блока в компиляции - блок кода, который компилятор процессов в один блок - собирается быть ограничено объемом памяти, компьютер компиляции. Чтобы обработать символы, которые вы вводите в машинный код, компилятору необходимо удерживать все символы в таблице поиска и ссылаться на них, поскольку они попадают в них в ваш код.
Когда C был создан в 1972 году, вычислительные ресурсы были намного более скудными и с высокой премией - память, необходимая для хранения всей символической таблицы сложной программы, сразу была недоступна в большинстве систем. Фиксированное хранилище также было дорогостоящим и чрезвычайно медленным, поэтому идеи, подобные виртуальной памяти или хранящие части символической таблицы на диске, просто не позволили бы компиляции в разумные сроки.
Лучшим решением этой проблемы было разбиение кода на более мелкие фрагменты, путем сортировки людей, какие части таблицы символов необходимы, в каких единицах компиляции раньше времени.Наложив довольно небольшую задачу на программиста, объявив, что он использовал бы, сэкономил огромное усилие на то, чтобы компьютер искал всю программу для чего-либо программиста мог использовать.
Он также сохранил компилятор от необходимости делать два прохода в каждом исходном файле: первый для индексации всех символов внутри, а второй для анализа ссылок и поиска их. Когда вы имеете дело с магнитной лентой, где время поиска измерялось в секундах, а пропускная способность чтения измерялась в байтах в секунду (не килобайтах или мегабайтах), это было довольно значимым.
C++, созданный почти 17 лет спустя, был определен как надмножество C и поэтому должен был использовать тот же механизм.
К тому времени, когда Java развернулась в 1995 году, средним компьютерам хватило памяти, что наличие символической таблицы даже для сложного проекта больше не было существенным бременем. И Java не был предназначен для обратной совместимости с C, поэтому ему не нужно было использовать устаревший механизм. C# так же не обременен.
В результате их дизайнеры решили переложить бремя отсечения символической декларации обратно на программиста и снова положить его на компьютер, поскольку его стоимость пропорционально суммарному усилию компиляции была минимальной.
C++ компилятор будет читать последовательно [то есть, он будет читать сверху вниз. ...] Вот как работает язык. Тогда ваше предложение «пройти» через два и посмотреть на прототипы функций будет работать, но, к сожалению, это не так, как работает язык. – Warty
Дубликат: http://stackoverflow.com/questions/752793 –
C как язык был стандартизирован более 30 лет назад, когда базовая технология была и гораздо менее способна и намного дороже, чем сегодня. Нежное предложение: попытайтесь немного узнать об истории вещей и поймите что мир сильно изменился с тех пор е решения были приняты и будут продолжать меняться после того, как вы сделаете выбор в своих усилиях в области развития. Кто-то, когда-нибудь, * заинтересует «WTF ?!» о ваших решениях .... ;-) – DaveE