На такие вопросы обычно нельзя ответить наверняка, потому что вы запрашиваете информацию о коллективных мыслях и обсуждениях комитета C, в 1989 . Они никогда не занимались разработкой языка полностью публично, как, скажем, люди, ответственные за Python, а тридцать лет назад они делали это еще меньше. И если бы вы опросили их лично, они, вероятно, не помнят.
Мы можем взглянуть на документ C Обоснование (я ссылаюсь на издание, соответствующее C1999, но, насколько я знаю, оно не сильно изменилось с 1989 года) для подсказок, но на быстрое рассмотрение, я не вижу ничего подходящего для вашего вопроса.
Это заставляет меня делать догадки на основе общих принципов проектирования языка программирования. - это общий принцип, соответствующий вашему вопросу: особенно для более старых языков дизайнеры стараются сделать формальный синтаксис максимально свободным от контекста 1012 *. Это значительно облегчает написание эффективного синтаксического анализатора. Правила типа «у вас не может быть функции, которая возвращает функцию» требуют контекста, и поэтому они не входят в синтаксис. Вместо этого легко обрабатывать их как дополнительные ограничения, применяемые к дереву разбора, поэтому дизайнеры так и делают.
В грамматике Си есть целый ряд мест, где этот принцип, похоже, использовался, а не только тот, о котором вы спрашиваете. Например, правило «максимального мунка» для токенизации существует, потому что это означает, что токенизатору не нужно знать о полном контексте синтаксического анализатора, даже если это приводит к неудобным результатам, таким как a-----b
интерпретируется как a -- -- - b
вместо a -- - -- b
, даже если парсер отклонит первое, но примет второе.
Этот принцип разработки для языков программирования часто удивляет начинающих, потому что он настолько отличается от того, как люди понимают естественные языки; мы сделаем все возможное, чтобы «исправить» какое-то контекстуально подходящее значение даже из самых бессмысленных предложений, и мы фактически полагаемся * на это в разговоре. Это может помочь рассмотреть мета-принцип, согласно которому чем хуже, тем лучше (упрощенно, потому что вы можете быстро выполнить первые 90% работы и выполнить ее, а затем повторить оставшиеся 90%) .