2016-02-09 23 views
0

我宣佈一個頭文件中的結構,讓我們以此爲例子:如何在main.c中使用另一個.c文件中定義的結構?

//file.h 
#ifndef FILE_H_INCLUDED 
#define FILE_H_INCLUDED 

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

#endif // FILE_H_INCLUDED 

然後我定義的另一個文件結構,包含的函數原型,我將在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中,因爲我希望它儘可能清楚。我不能使用全局變量tho。

+2

看起來你已經在使用一個全局變量'p'。 – aschepler

+0

那應該是什麼定義呢? – Simone

+0

如果它在另一個文件中並且不是全局的,那麼它不能直接在該文件之外訪問。所以你的兩個要求似乎是矛盾的。你可以在'function.c'中定義一個函數,如果可以接受'''返回'p'或指向'p'的指針。 – kaylum

回答

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); 
+0

我同意這是回答這個問題的最直接的方法,但它並不理想,因爲它鼓勵使用全局變量。 – Massey101

+0

@ Massey101全局變量在哪裏? 'p'是靜態的,只對'functions.c'本地,並且不涉及其他變量。 – chux

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); 
} 

爲你的結構的邏輯包含在一個單獨的文件,它不使用全局變量,這是理想。

相關問題