如何在main.c中使用另一个.c文件中定义的结构?

时间:2016-02-09 23:49:16

标签: c file structure

我在头文件上声明了一个结构,让我们以此为例:

//file.h
#ifndef FILE_H_INCLUDED
#define FILE_H_INCLUDED

typedef struct {
    int x;
    int y;
} Point;

#endif // FILE_H_INCLUDED

然后我在另一个文件上定义了struct,它包含我将在main.c上使用的函数原型:

//functions.c
#include "file.h"

Point p = {{1},{2}};

现在我的问题是,如何在main.c上使用该结构?想做点什么:

//main.c
#include "file.h"

printf("Point x: %d", p.x);

现在,我的真正结构有8个字段,它是一个包含40个元素的数组,所以它是40行代码,我不想把它放在main.c中,因为我希望它尽可能清晰。我不能使用全球大战。

2 个答案:

答案 0 :(得分:1)

试试这个:

// file.h
typedef struct {
    int x;
    int y;
} Point;
void setup_point(Point *);

// functions.c
#include "file.h"
void setup_point(Point * p) {
    p->x = 1;
    p->y = 2;
}

// main.c
#include "file.h"
int main() {
    Point p;
    setup_point(&p);
    printf("Point x: %d", p.x);
}

这是理想的,因为结构的逻辑包含在一个单独的文件中,并且它不使用全局变量。

答案 1 :(得分:0)

创建一个函数,返回p的地址。

 //file.h
 Point *Point_p(void);

//functions.c
#include "file.h"
static Point p = {{1},{2}};
Point *Point_p(void) { return &p; }

//main.c
#include "file.h"
printf("Point x: %d", Point_p()->x);