大量报错不得其解,难道结构体声明是不能被extern的吗?那么如果我想在多个文件中用了一个同结构体,且结构体内的数据是通用流通的,我该怎么写才会是最佳方案呢
结构体的定义在哪里实现的呢?截图看看
当然可以,但你要确保extern的位置,也有结构体的声明
比如这个结构体的结构是在mpu6050.h定义的,那你在定义和extern结构体变量的两个c文件里,都要包含mpu6050.h这个头文件,包含的结构体定义必须在变量之前
对于在多个文件中使用同一结构体并共享其数据,可以采用以下步骤:
1.在一个头文件(.h)中定义这个结构体,只放变量的声明,不要定义变量,因为头文件需被其他文件包含,定义放到头文件中会引起多次定义错误。例如,我们可以在一个头文件struct.h中定义结构体:
typedef struct {
int num;
char name[10];
} MyStruct;
2.在需要使用该结构体的.c文件中,包含上述头文件,并定义一个该结构体的实例,同时声明该实例为extern类型,表示它已经在其他文件中定义过了。例如,在a.c中:
#include "struct.h"
MyStruct externStruct; //声明为extern类型
3.在其他需要使用该结构体的.c文件中,也包含该头文件,并使用该结构体实例。例如,在b.c中:
#include "struct.h"
extern MyStruct externStruct; //声明为extern类型
4.通过使用该结构体的实例对它的成员进行读写操作。例如,在函数中给externStruct.num赋值:
externStruct.num = 1;
注意,外部变量并不在头文件中定义,它将在另一文件中定义,所以不能将其定义在头文件中。同时,使用extern关键字声明结构体表示它已经在其他文件中定义过了,不需要重复定义。