typedef int arr[10]
arr intArray;
等价于
int intArray[10];
然而,我对实现此目的的习惯惊惑不解。对我来说,以下代码
typedef int arr[10]
不明确,而以下代码更加清晰易懂:typedef int[10] arr
即将“int[10]”定义为名为arr的新类型。然而,编译器不接受此代码。请问为什么?这只是C语言的惯例吗?早期版本的C语言没有 typedef
关键字。当它在这门语言中添加(大概在1978年之前)时,必须以与现有语法一致的方式进行。
从句法上讲,关键字 typedef
被视为一个存储类别说明符,就像 extern
或 static
一样,尽管它的含义是完全不同的。
所以,就像你可能会写:
static int arr[10];
您需要写:
typedef int arr[10];
将typedef
声明视为类似于对象声明的东西。不同之处在于它创建的标识符(在此示例中为arr
)是类型名称而不是对象名称。
因为这就是语言的定义方式。我猜想,部分原因是为了让typedef
中的内容遵循与普通变量声明相同的规则,只不过名称是类型名称而不是变量名称(因此解析器的这一部分可以被重复使用)。
int arr[10]
? :) - PavelintArray
,用于声明一个数组。 - thistypedef
,这意味着变量名称成为类型别名的名称。 - M.M