c中的结构标签兼容性>> [

问题描述 投票:0回答:1
我听说从C99开始,在不同文件中定义的两个完整struct必须具有相同的标签才能兼容。

所以我写了以下代码:

file1.c

/* file1.c */ #include <stdio.h> typedef struct tag1 { int foo; } type1; type1 a; void func(void); int main() { printf("a.foo : %d\n", a.foo); func(); printf("a.foo : %d\n", a.foo); return 0; }

file2.c

/* file2.c */ typedef struct tag2 { int foo; } type2; type2 a; void func(void) { a.foo = 100; }
并且期望两个a被认为是不同的,因此两个printf都将打印a.foo : 0,但输出是:

a.foo : 0 a.foo : 100

这是为什么?

我读到从C99开始,在不同文件中定义的两个完整结构必须具有相同的标记才能兼容。所以我写了以下代码:file1.c:/ * file1.c * / #include

...

c struct c99
1个回答
1
投票
关于类型问题,C标准中的规则等于:
© www.soinside.com 2019 - 2024. All rights reserved.