c类型等价的编译器

时间:2017-06-01 15:22:54

标签: c

在C语言中,如果我们有:

typedef int a[100];
typedef int b[200];

然后类型a和b是等价的? 据我所知,C使用名称等价, 但我很困惑。

1 个答案:

答案 0 :(得分:9)

在您的示例中,aint[100]类型的别名,b是类型int[200]的别名。这两种类型不等同,因为数组的大小是其类型的一部分,不同的大小意味着不同的类型。

如果第二行是typedef int b[100];,则ab是等效的。

  

据我所知,C使用名称等价

结构和联合在名义上是键入的,如果你有两个标记为A和B的结构(或联合)类型,它们具有完全相同的主体,它们仍然被认为是不同的类型。因此,如果变量的类型为struct A,则无法先为其转换struct B而不先将其转换。

对于仅仅是别名的typedef,情况并非如此。因此,如果您有两个typedef typedef X a; typedef X b;,那么Xab都无法区分。