【问题标题】:typedef array type in CC中的typedef数组类型
【发布时间】:2014-08-03 11:33:14
【问题描述】:

typedef int arr[10]

我了解上述语句为 int[10] 定义了一个新名称 这样

arr intArray;

等价于

int intArray[10];

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

typedef int arr[10]

很困惑,对我来说一个清晰的方法是

typedef int[10] arr

即我将“int[10]”定义为一种称为 arr 的新类型

但是,编译器不接受这个。

请问为什么?它只是 C 语言的约定吗?

【问题讨论】:

  • 但是在定义数组时使用这个顺序很酷:int arr[10]? :)
  • 阅读标准; [] 出现在指示符之后,在您的示例中为 intArray,用于声明一个数组。
  • 和声明变量完全一样,只是前面贴typedef,表示变量名变成了类型别名。
  • 这只是 C 的一个约定。它有时被称为“声明模仿使用”(尝试在谷歌搜索“C 语言类型声明模仿使用”)。

标签: c arrays typedef


【解决方案1】:

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

在语法上,关键字typedef 被视为存储类说明符,就像externstatic,尽管其含义完全不同。

正如你可能写的那样:

static int arr[10];

你会写:

typedef int arr[10];

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 2013-07-20
      • 1970-01-01
      • 2016-09-27
      相关资源
      最近更新 更多