Я понимаю историю этого так, что он основан на двух основных моментах ...
Во-первых, авторы языка предпочли сделать синтаксис ориентированным на переменные, а не на типовые. То есть они хотели, чтобы программист посмотрел на объявление и подумал: «если я напишу выражение *func(arg)
, это приведет к int
; если я напишу, у *arg[N]
меня будет число с плавающей точкой», а не « func
должен быть указатель на функцию, принимающую это и вернуть это ".
Запись C в Википедии утверждает, что:
Идея Ричи состояла в том, чтобы объявить идентификаторы в контекстах, напоминающих их использование: «объявление отражает использование».
... ссылаясь на p122 из K & R2, который, увы, мне не нужно искать расширенную цитату для вас.
Во-вторых, на самом деле очень, очень сложно придумать синтаксис для объявления, который будет согласован, когда вы имеете дело с произвольными уровнями косвенности. Ваш пример может хорошо работать для выражения типа, который вы придумали там, но масштабируется ли он до функции, которая берет указатель на массив этих типов и возвращает какой-то другой отвратительный беспорядок? (Может быть, но вы проверили? Можете ли вы доказать это? ).
Помните, что часть успеха C связана с тем фактом, что компиляторы были написаны для многих разных платформ, и поэтому было бы лучше игнорировать некоторую степень читабельности для облегчения написания компиляторов.
Сказав это, я не эксперт по грамматике языка или написанию компилятора. Но я знаю достаточно, чтобы знать, что есть, что знать;)