结构体声明是不能被extern的吗?那么如果我想在多个文件中用了一个同结构体,且结构体内的数据是通用流通的,我该怎么写才会是最佳方案呢

大量报错不得其解,难道结构体声明是不能被extern的吗?那么如果我想在多个文件中用了一个同结构体,且结构体内的数据是通用流通的,我该怎么写才会是最佳方案呢

img

结构体的定义在哪里实现的呢?截图看看

当然可以,但你要确保extern的位置,也有结构体的声明
比如这个结构体的结构是在mpu6050.h定义的,那你在定义和extern结构体变量的两个c文件里,都要包含mpu6050.h这个头文件,包含的结构体定义必须在变量之前

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7586191
  • 以下回答来自chatgpt:

    对于在多个文件中使用同一结构体并共享其数据,可以采用以下步骤:

    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关键字声明结构体表示它已经在其他文件中定义过了,不需要重复定义。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^