typedef 语法中名称和类型的正确位置是什么?

What is the correct placement of names and types in the typedef syntax?

通常typedef的语法如下

typedef <existing_name> <new_name>

但是在下面的情况下,我有点困惑

  typedef char yes[1];
  typedef char no[2];

以上似乎可行。为什么以及如何?

不应该这样写吗?

  typedef yes char[1];
  typedef no char[2];

Usually the syntax of typedef is...

不,那不准确。通常的语法是

typedef <variable declaration>;

然后声明被分解,变量的 name 成为变量本来类型的新名称。您感到困惑的情况与此一致。在没有 typedef 的情况下,这就是您声明数组变量的方式。添加一个typedef,变量名就变成了类型的新名称。

当然,现代类型别名实际上看起来更像您期望的那样

using yes = char[1];
using no  = char[2];

从某种意义上说,这很好,因为它不需要理解 C++ 的声明符语法就可以看到类型的名称。不过,仍然需要了解在右侧编写类型的语法...