1

我需要定义一个结构,比如说

//globalstruct.h
typedef struct _GlobalStruct {
    int a, b;
} GlobalStruct

然后GlobalStruct在我想要的任何地方使用globalstruct.h

例如:

//test.c
#include globalstruct.h
void test(GlobalStruct *gs){...}

我怎样才能做到这一点?

问候

- - 编辑 - -

我想我需要再澄清一点我的问题,因为我完全被困住了。

//main.c
#include "gstruct.h"
#include "a.h"
#include "b.h"

...
void something(GlobalStruct *gs){...}

.

//gstruct.h
#ifdef gstruct_h
#define gstruct_h
typedef struct _GlobalStruct{
    int a, b;
} GlobalStruct;
#endif

.

//a.h
#ifdef a_h
#define a_h
#include "gstruct.h"
GlobalStruct a_something(...);
#endif

.

//a.c
#include "gstruct.h"
#include "a.h"
GlobalStruct a_something(...){...}

.

//b.h
#ifdef b_h
#define b_h
#include "gstruct.h"
GlobalStruct b_something(...);
#endif

.

//b.c
#include "gstruct.h"
#include "b.h"
GlobalStruct b_something(...){...}

.

这个可以吗?因为如果是的话,我会错过一些非常愚蠢/小/愚蠢的东西。

顺便说一句,我正在编译gcc main.c a.c b.c -o the_thing

---第二次编辑----

我刚刚创建了一个在线示例,您可以查看、下载并试用。它已准备好编译,但在编译时会失败。

https://compilr.com/alexandernst/c-headers

4

2 回答 2

4

您快到了。需要修复三个错误:

  1. 在 include 指令中添加引号:

    #include "globalstruct.h"
    
  2. 在 typedef 声明的末尾需要一个分号。

  3. 您不能使用下划线大写名称,因为这些名称是保留的。而是使用类似的东西:

    typedef struct GlobalStruct_struct { /* ... */ } GlobalStruct;
    

(感谢@chris 发现第二名!)

于 2012-08-23T23:03:09.653 回答
2

在头文件中,#ifdef 应该是 #ifndef

于 2012-08-24T01:35:01.830 回答