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
...