确实如此。typedef名称在定义后有效地成为关键字,但当它们超出范围时,它们停止成为关键字。这意味着您需要从符号表向解析器获取某种反馈,这是(我认为)大多数其他语言不需要的。只举一个例子:您无法解析sizeof(foo[10])而不知道foo是否为typedef。(历史上,这是因为typedef是语言的相对较晚的添加 - 在K&R之前,但在类型系统被定义之后。) - Keith Thompson
1即使处理了typedef问题,解析可能是抽象的声明符仍然非常复杂。作为一名研究生,我为一个研究项目编写了一个C解析器,并在尝试弄清楚如何正确地完成它时,发现了每个现有实现的反例,包括当时的GCC解析器。虽然我现在无法记住任何反例或其他细节,但它们确实非常棘手。 - hmakholm left over Monica
sizeof(foo[10])
而不知道foo
是否为typedef。(历史上,这是因为typedef是语言的相对较晚的添加 - 在K&R之前,但在类型系统被定义之后。) - Keith Thompson