C语言中如何在多个文件中引用同一个结构体

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中如何在多个文件中引用同一个结构体相关的知识,希望对你有一定的参考价值。

有3个文件:file1.h,file2.c,file3.c。
//file1.h
struct st

double u,v;
;

//file2.c
#include "file1.h"
#include "file3.c"
struct st gg;
....

//file3.c
extern struct st gg;
gg.u=3;

上面就是我的程序,报错说gg结构没有定义,可是如果我在file3.c里面#include "file1.h"又说st重复定义,我该怎么办,请大侠指教。

引用结构体有引用类型,和引用全局变量两种方式。

1 引用类型。
需要将结构体定义与头文件中(.h文件),然后在需要引用类型的源文件(.c)中,均引用该头文件,即可使用该类型。

2 引用全局变量。
要引用全局变量,需要先引用类型,之后在一个源文件中定义全局变量,在其它源文件中声明该全局变量,即可使用。
比如结构体为struct test, 定义全局变量为
struct test glabol_test;
在其它文件中,只需要
extern struct test globol_test;
即可在对应文件声明所在行之下进行调用。

PS:该声明部分,也可以写在定义结构体的头文件中。
参考技术A 在包含结构体的文件开始加一行
#pragma once
这样只编译一次本回答被提问者采纳
参考技术B 把结构体定义在一个公共头文件里 然后都包含这个头文件 参考技术C //file2.c
#include "file1.h"
#include "file3.c"
st gg;
参考技术D #ifndef

c语言如何在多个c文件里同时使用一个结构体?

在多个c文件里同时使用一个结构体内的所有变量,就是一个结构体内的所有变量的值在各个c文件内都一样,同步使用

可以使用全局变量,例如:头文件声明:struct MyStruct.......; 在源文件3声明定义变量:

Mystruct my_1; 在原文件1,2的文件头声明,extern Mystruct my_1(表示该变量是在其它文件中声明定义的),那么这三个文件使用的都是同一个全局变量
参考技术A struct name
int x;
double y;
type a;
type b;

用的时候要用struct name c;
c.x是c的成员x
可以定义别名
typedef struct name Name;
Name c;
或者直接定义别名
typedef struct
int a;
int b;
Name;

以上是关于C语言中如何在多个文件中引用同一个结构体的主要内容,如果未能解决你的问题,请参考以下文章

c 中结构体变量 如何在其他c文件中声明

C语言源文件之间的自定义类型(结构体)如何相互引用?

c语言如何在多个c文件里同时使用一个结构体?

C语言编程 结构体让多个CPP使用

c语言中如何引用另一个源文件中定义的结构数组

C语言头文件中定义结构体的问题