我在头文件上声明了一个结构,让我们以此为例:
//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中,因为我希望它尽可能清晰。我不能使用全球大战。
答案 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);