gpt4 book ai didi

c - typedef、结构和类型兼容性

转载 作者:太空狗 更新时间:2023-10-29 16:46:35 29 4
gpt4 key购买 nike

如果我有这两个结构:

struct
{
int x;
} A;

struct
{
int x;
} B;

然后 A = B; 会导致编译错误,因为这两个匿名结构不兼容。

但是如果我这样做:

typedef struct
{
int x;
} S;

S A;

S B;

A = B; 是合法的赋值,因为它们是兼容的。

但是为什么?使用 typedef 我知道编译器在遇到 S AS B 时会这样:

struct { int x; } A;
struct { int x; } B;

所以 AB 不应该兼容...

最佳答案

每个匿名结构声明都是不同的类型;这就是为什么在尝试将一个分配给另一个时会出现类型不匹配的原因。

然而,typedef 为一个类型声明一个别名(即已经存在的东西的新名称)(它不会创建一个新类型)。

typedef 也不是简单的文本替换,就像预处理器宏一样。你的陈述

I understand that the compiler make this when meet S A and S B:

struct { int x; } A;
struct { int x; } B;

是你理解错误的地方。

当您使用类型别名 S 时,如

S A;
S B;

根据定义,AB 这两个对象的类型是相同的,并且可以将一个对象分配给另一个对象。

关于c - typedef、结构和类型兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25907677/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com