在C/C++中使用`typedef`的暗角?

duo*_*gja 5 c c++ typedef language-lawyer

我最近发现了C/C++的黑暗角落:typedef关键字不需要成为第一个单词就行了,并且知道下面所有看起来很奇怪 typedef的东西在C和C++中都是有效的,我感到很惊讶:

int typedef a;
short unsigned typedef b;
Run Code Online (Sandbox Code Playgroud)

以上typedefs相当于:

typedef int a;
typedef short unsigned b;
Run Code Online (Sandbox Code Playgroud)

并且,以下内容在C++中无效,但在C中有效:

typedef enum { c };
typedef;
typedef int;
typedef int short;
Run Code Online (Sandbox Code Playgroud)

语言设计师在C和C++中留下这个黑暗角落的原因是什么?

San*_*urg -2

也许它与修饰符的规则相同cv=修饰符适用:

  • 其左边的第一个东西
  • 或者如果是空的,则在其右侧的东西上

就像cv修饰符(别名const volatilemutable)一样,我猜typedef遵循相同的规则。

const 适用于它左边的内容。如果左侧没有任何内容,则它适用于右侧的内容。