定义新数据类型

时间:2017-02-08 17:42:28

标签: c c89

我有以下代码:

#include <stdio.h>

int main(void) {
    typedef int new_type[];
    new_type Number[8];
    return 0;
}

编译器(Gcc-4.9.2)显示错误:数组类型的元素类型不完整
我有一些问题:
1. C90标准是否接受new_type到typedef的定义?在这种情况下,new_type是一种数据类型,它将数组定义为未定义的元素,或指针定义为int的数组?<登记/> 2.如果我们保留行typedef int new_type[];,我们如何定义new_type类型的变量?   谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

  

通过typedef定义的new_type是否被C90标准接受?在这种情况下,new_type是一个数据类型,它定义了一个未定义数量的元素数组或一个指向int数组的指针?

typedef本身不是问题,因为你可以输入不完整的类型(typedef struct A A_s;)。而new_type确实与你的想法非常相似。

  

如果我们保留行typedef int new_type[];,我们如何定义new_type类型的变量?

对于变量定义,变量的类型必须是完整类型,因此:

typedef int new_type[];
new_type Number = { 1, 2, 3 };

将导致Number成为大小为3的int数组。但是,您尝试将Number定义为大小为8的int[]数组(int Number[8][];

但是未指定大小的数组不能用于定义任何变量,数组或者是结构 1 的成员(没有不完整的类型可用于这些目的)。

<子>     1.除非它是最后一个,否则允许灵活的数组成员(对它有很多限制)。