2017-07-27 82 views
1

我有一個頭文件中稱爲h1.h,包含在兩個源文件c1.cc2.c中聲明的結構。使一個全局結構指針可用於多個源文件

typedef struct 
{ 
    char binary_filename[256]; 
}programming; 

我想創建這個結構的兩個變量,device1device2然後聲明兩個指針,以每個變量,programmingPtr1programmingPtr2的。

我希望能夠訪問每個源文件中的實例的成員binary_filename

我很困惑,我應該在哪裏聲明這些變量和指針。

我應該在頭文件中聲明變量爲extern嗎?我寫this post但它不處理指向變量的指針。

請問有人建議最好的方法?

+0

你可以在'C'文件中定義一個變量,並在另一個文件中聲明它爲'extern'(或者根據你的設計在頭文件中) –

回答

1

要在多個源文件使用的變量,你需要聲明他們在頭文件中所有相關的來源包括,那麼你在一個源文件中定義他們。

所以,你的頭將有:

extern programming device1; 
extern programming device2; 
extern programming *programmingPtr1; 
extern programming *programmingPtr2; 
一個源文件

然後,你會:

programming device1 = { "filename1" }; 
programming device2 = { "filename2" }; 
programming *programmingPtr1 = &device1; 
programming *programmingPtr2 = &device2; 
+0

謝謝我試過了,我得到了一個'undefined在源文件中引用'programmingPtr1''?有任何想法嗎? –

+0

@articsol您需要將兩個文件鏈接在一起。使用FCC將是'gcc -o program file1.c file2.c' – dbush

0

沒有創建任何實例 - 他們只是兩個獨立的結構全球範圍。指針也是一樣。您只需通知編譯器該對象是使用關鍵字extern在其他地方定義的。當然你也需要有你的typedef。

定義的extern對象和物理對象之間的實際「連接」將由鏈接器完成。

相關問題