Да, макросы в значительной степени беспорядок.
typedef
был добавлен в язык довольно долго после того, как большая часть оставшегося языка была завершена.Он использует тот же синтаксис, что и класс хранения:
static int x;
extern int y;
typedef int z;
Они определяют x
, y
и z
как все int
- разница в том, что x
и y
являются объектами типа int
, а z
в основном является псевдонимом для самого int
.
Таким образом, typedef
достаточно хорошо соответствует самому языку, и это (как обычно)препроцессор, который действительно "странный человек".В то же время, вы можете утверждать, что остальная часть языка должна измениться.Просто для наглядного примера, Паскаль примерно изменил порядок вещей:
type
z = integer;
var
x : integer;
Хотя это не имеет большого значения для тривиальных примеров, я думаю, что это довольно просто читать, особенно когда вы имеете делос более сложными декларациями.Однако, к лучшему или худшему, Pascal (в основном) потерял популярность, и более новые языки, такие как Java, сохранили эту конкретную часть синтаксиса C (т. Е. Та часть C, которую они сохранили, была единственной вещью, которая нуждалась в изменении).