C / C ++中带有`typedef`的暗角?

时间:2018-12-07 07:48:33

标签: c++ c language-lawyer typedef

我最近发现了Dark corners of C/C++: The typedef keyword doesn’t need to be the first word on the line,并且惊讶地发现以下所有外观怪异 typedef在C和C ++中都有效:

int typedef a;
short unsigned typedef b;

以上typedef等同于:

typedef int a;
typedef short unsigned b;

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

typedef enum { c };
typedef;
typedef int;
typedef int short;

语言设计者为何在C和C ++中留下这个黑暗的角落,原因何在?

2 个答案:

答案 0 :(得分:0)

我认为,最主要的是保持与旧程序和库的兼容性。有很多。

答案 1 :(得分:-2)

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

  • 位于左边第一件事
  • 或如果为空,则在右边的东西

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

  

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