Я розумію історію цього в тому, що вона базується на двох основних моментах ...
По-перше, автори мови воліли зробити синтаксис змінним-орієнтованим, а не типовим. Тобто, вони хотіли, щоб програміст подивився на декларацію і подумав, "якщо я напишу вираз *func(arg)
, це призведе до" int
; якщо я напишу, *arg[N]
я матиму "float", а не ", func
повинен бути вказівником на функцію, що приймає це" і повернення того ".
Запис C у Вікіпедії стверджує, що:
Ідея Рітчі полягала в тому, щоб оголосити ідентифікатори в контекстах, що нагадують їх використання: "декларація відображає використання".
... посилаючись на p122 K&R2, які, на жаль, мені не потрібно подавати, щоб знайти розширену для вас пропозицію.
По-друге, насправді дуже важко придумати синтаксис декларування, який є послідовним, коли ви маєте справу з довільними рівнями непрямості. Ваш приклад може спрацювати для висловлення типу, який ви придумали там, де він працює, але чи він масштабує функцію, що приймає вказівник на масив цих типів і повертає якусь іншу неприємну безлад? (Може, і є, але ви перевірили? Чи можете ви це довести? ).
Пам’ятайте, частина успіху C пояснюється тим, що компілятори написані для багатьох різних платформ, і тому, можливо, було б краще проігнорувати певну ступінь читабельності для полегшення запису компіляторів.
Сказавши це, я не знавець мовної граматики чи написання укладачів. Але я знаю достатньо, щоб знати, що можна багато чого знати;)