在C语言中,typedef可以用来定义数组类型。

7

typedef int arr[10]

我理解上述语句定义了一个新的名称"arr"来代表"int[10]",因此
arr intArray;

等价于

int intArray[10];

然而,我对实现此目的的习惯惊惑不解。对我来说,以下代码typedef int arr[10] 不明确,而以下代码更加清晰易懂:typedef int[10] arr即将“int[10]”定义为名为arr的新类型。然而,编译器不接受此代码。请问为什么?这只是C语言的惯例吗?

1
但是你是否愿意在定义数组时使用这个顺序呢:int arr[10]? :) - Pavel
1
阅读标准;在您的示例中,[]跟在标识符后面,该标识符是intArray,用于声明一个数组。 - this
2
它与声明变量完全相同,除了在前面加上 typedef,这意味着变量名称成为类型别名的名称。 - M.M
1
这只是C语言的一种约定。有时也被称为“声明模仿使用”(尝试在谷歌上搜索“C语言类型声明模仿使用”)。 - Jonathan Leffler
2个回答

11

早期版本的C语言没有 typedef 关键字。当它在这门语言中添加(大概在1978年之前)时,必须以与现有语法一致的方式进行。

从句法上讲,关键字 typedef 被视为一个存储类别说明符,就像 externstatic 一样,尽管它的含义是完全不同的。

所以,就像你可能会写:

static int arr[10];

您需要写:

typedef int arr[10];

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


0

因为这就是语言的定义方式。我猜想,部分原因是为了让typedef中的内容遵循与普通变量声明相同的规则,只不过名称是类型名称而不是变量名称(因此解析器的这一部分可以被重复使用)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接