«Те, кто не может вспомнить прошлое, обречены повторять его».
Помещение типа до того, как переменная начиналась достаточно безобидно с Фортрана и Алгола, но это стало ужасно в Си, где некоторые модификаторы типов применяются до переменной, другие после. Вот почему в C у вас есть такие красавицы, как
int (*p)[10];
или
void (*signal(int x, void (*f)(int)))(int)
вместе с утилитой (cdecl), целью которой является расшифровка такого бреда.
В Паскале тип идет после переменной, поэтому первые примеры становятся
p: pointer to array[10] of int
Контрастность с
q: array[10] of pointer to int
который в С равен
int *q[10]
В C вам нужны круглые скобки, чтобы отличить это от int (* p) [10]. Скобки не требуются в Паскале, где важен только порядок.
Функция сигнала будет
signal: function(x: int, f: function(int) to void) to (function(int) to void)
Все еще глоток, но, по крайней мере, в сфере человеческого понимания.
Честно говоря, проблема не в том, что C ставит типы перед именем, а в том, что он извращенно настаивает на том, чтобы ставить кусочки до, а другие после имени.
Но если вы попытаетесь поставить все перед именем, порядок все равно не интуитивен:
int [10] a // an int, ahem, ten of them, called a
int [10]* a // an int, no wait, ten, actually a pointer thereto, called a
Итак, ответ таков: разумно разработанный язык программирования ставит переменные перед типами, потому что результат более читабелен для людей.