typedef,结构和类型兼容

xde*_*000 10 c struct

如果我有这两个结构:

struct
{
   int x;
} A;

struct
{
   int x;
} B;
Run Code Online (Sandbox Code Playgroud)

然后A = B;在编译错误中产生结果,因为两个匿名结构不兼容.

但是,如果我这样做:

typedef struct
{
   int x;
} S;

S A;

S B;
Run Code Online (Sandbox Code Playgroud)

A = B; 是合法的,因为它们是兼容的.

但为什么?随着typedef我明白,编译器使得这个时候相遇S AS B:

struct { int x; } A;
struct { int x; } B;
Run Code Online (Sandbox Code Playgroud)

所以AB不能兼容...

Jen*_*ens 15

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

但是,typedef为类型声明别名(即已存在的新名称)(它不会创建新类型).

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

据我所知,编译使这个时候相遇S AS B:

struct { int x; } A;
struct { int x; } B;
Run Code Online (Sandbox Code Playgroud)

是你理解错误的地方.

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

S A;
S B;
Run Code Online (Sandbox Code Playgroud)

两个对象的类型AB是相同的定义和分配一个到另一个是可能的.