C类型等价的编译器

6

在C语言中,如果我们有以下代码:

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

那么类型a和b是等效的吗?据我所知,C使用名称等价性,但我很困惑。


1
尝试在它们每一个上使用 sizeof... - Eugene Sh.
@EugeneSh。为什么?“相同大小”并不一定意味着“相同类型”。typeof()(如果支持)可能是一个更好的选择。 - tofro
2
@tofro 不同的大小必然意味着不同的类型。 - Eugene Sh.
1个回答

10
在您的示例中,a是类型int[100]的别名,b是类型int[200]的别名。这两种类型不等同,因为数组的大小是其类型的一部分,不同的大小意味着不同的类型。
如果第二行是typedef int b[100];,则ab将是等价的。
据我所知,C使用名称等价性。
在结构体和联合体中,标记为A和B的两个结构体(或联合体)类型具有完全相同的主体,它们仍然被认为是不同的类型。因此,如果变量具有类型struct A,则必须先转换才能将其赋值给struct B
对于typedef,情况并非如此,它们只是别名。因此,如果您有两个typedefs typedef X a; typedef X b;,那么Xab彼此都是不可区分的。

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