C中的typedef数组类型

Jin*_*ing 5 c arrays typedef

typedef int arr[10]

据我所知,上面的语句为int [10]定义了一个新名称

arr intArray;
Run Code Online (Sandbox Code Playgroud)

相当于

int intArray[10];
Run Code Online (Sandbox Code Playgroud)

但是,我对这样做的惯例感到困惑.在我看来,这

typedef int arr[10]

令人困惑,对我来说是一个明确的方式

typedef int[10] arr

即我将"int [10]"定义为一个名为arr的新类型

但是,编译器不接受这一点.

我可以问为什么?它只是C语言的惯例吗?

Kei*_*son 8

很早版本的C没有typedef关键字.当它被添加到语言中时(1978年之前的某个时间),它必须以与现有语法一致的方式完成.

从语法上讲,关键字typedef被视为存储类说明符,就像externstatic,即使它的含义完全不同.

就像你写的那样:

static int arr[10];
Run Code Online (Sandbox Code Playgroud)

你写的:

typedef int arr[10];
Run Code Online (Sandbox Code Playgroud)

typedef声明视为与对象声明类似的东西.不同之处在于它创建的标识符(arr在本例中)是类型名称而不是对象名称.


Sco*_*ter 0

因为这就是语言的定义方式。我的猜测是,在某种程度上,进入 a 的内容遵循typedef与普通变量声明相同的规则,除了名称是类型的名称而不是变量(因此解析器的这一部分可以是重新使用)。