Почему функции нужно объявлять до их использования?

Читая некоторые ответы на этот вопрос , я начал задаваться вопросом, почему компилятор на самом деле действительно должен знать о функции, когда он впервые с ней сталкивается. Разве не было бы просто добавить дополнительный проход при синтаксическом анализе модуля компиляции, который собирает все символы, объявленные внутри, так что порядок, в котором они объявляются и используются, больше не имеет значения?

Кто-то может возразить, что объявление функций перед их использованием, безусловно, является хорошим стилем, но мне интересно, есть ли еще какая-то причина, по которой это обязательно в C ++?

Изменить - Пример для иллюстрации: Предположим, у вас есть функции, которые определены встроенными в файл заголовка. Эти две функции вызывают друг друга (возможно, рекурсивный обход дерева, где четные и нечетные слои дерева обрабатываются по-разному). Единственный способ решить эту проблему - сделать предварительное объявление одной из функций перед другой.

Более распространенным примером (хотя и с классами, а не функциями) является случай классов с private строители и фабрики. Фабрика должна знать класс, чтобы создавать его экземпляры, а классу нужно знать фабрику для объявления friend .

Если это требование из древних времен, почему это было не удаляется в какой-то момент? Это не нарушит существующий код, не так ли?

18
задан Community 23 May 2017 в 10:30
поделиться