2011-08-21 30 views
2

我在Main.c中定義了一個結構「數據」。如何使用另一個C文件中的結構中的數據?

我想在另一個文件app.c的函數中使用此結構的值。

請建議如何做到這一點。

+0

這是關於C或C#? –

+0

我很確定它是基於問題和標題的C語言。我編輯了標籤以符合這個假設... – Zach

+0

等待你想共享一個結構定義或者所述結構的值嗎? – Lalaland

回答

4

我假設你是問有關「C」,而不是「C#」,因爲你的問題是指「.c」的文件,而不是「的.cs」文件,等等:

做一個頭文件,並把結構那裏。

包括用在main.c中頭文件和app.c

#include "yourFileNameHere.h" 
2

通常你定義一個函數原型與包括警衛保護的頭文件:

//module.h 

#ifndef MODULE_H //include guard begin 
#define MODULE_H 

struct foobar{ 
    void *a_field; 
}; 
void prototype(void); 
#endif  //include guard end 

包括警衛阻止一些包括不同文件需要包含相同標題時的衝突。他們保證它只會包含一次。

然後你就可以包括頭部與C擴展實現了定義原型文件:

//module.c 

#include "module.h" 

void prototype(void){ 
    //implement prototype function 
    struct foobar f; 

} 

通常每頭文件中都有相關的C文件(這不是強制性的,它是一個慣例)。如果您只需要定義結構,則甚至不需要與頭文件關聯的C文件。如果你還有一些函數原型要實現,那麼這是組織代碼的好方法。

然後包括在所有其他文件中的頭文件需要它裏面所定義的功能或結構:

//otherfile.c 

#include "module.h" 
struct foobar f; 
prototype(); //you can now call prototype function from this file 

現在,可以編譯和這兩個文件鏈接在一起(prototype.c,otherfile.c)

0

既然你說你要重複使用在不同的源文件結構的值我假設你在main.c中定義的結構類型的變量,如:

struct <mystruct> foobar; 

如果你想在app.c使用此相同的foobar的,您必須聲明,變量有作爲,並增加EXTERN

extern struct <mystruct> foobar; 
+0

我認爲這個問題是在一個不同的C文件中重用一個結構'定義',而不是該結構類型的全局變量。我認爲我們不能真正extern結構定義。 externs只適用於佔用一些有形記憶的變量 – suppie

相關問題