[C]關於extern與struct
阿新 • • 發佈:2018-11-20
問題
我曾經很困惑,就是在兩個編譯單元當中,如何把一個單元中宣告的struct結構引入到另外一個單元中來,折騰了很久,後來發現這位大神的留言
不是這麼用的…… 型別的定義和型別變數的定義不同, 型別定義只是描述一個型別, 是給編譯器看的, 不會產生可執行程式碼。 變數定義是指在執行檔案中真實得存在這麼一塊內容。 因為每個.c裡都要寫清楚型別定義很麻煩, 所以一般都把型別定義寫在.h裡 ,而在.c裡採用簡單的寫法,如struct A a; 這樣定義變數, 不需把整個型別的描述再寫一遍。 -------------------------------- 所以,struct型別定義放到 ser.h裡面, ser.cpp CmfcDlg.cpp加上#include "ser.h" 然後直接使用extern struct str st_r; -------------------------------- 樓主要有研究精神…… 你先試下我上面說的…… |
我頓時發現自己是有多麼的傻x.
說白了extern面向結構的語法,只針對物件的本身,而不包括結構,結構只是一個模板,是寫給編譯器看得。並不存在extern結構的說法,只能extern結構物件。
如果需要在兩個編譯單元內引入外部變數,那麼你必須在兩個檔案當中引入這個結構,才能使用。
最科學的方法就是把結構寫進一個.h檔案,然後把它各自#include進每一個需要用到這個結構的檔案當中。
示例,把a.c的結構變數引入bc.c
a.c
struct chicken { char name[20]; int age; }; struct chicken jason = { "jason", 2 };
b.c
#include <stdio.h> struct chicken { char name[20]; int age; }; extern struct chicken jason; int main(void) { printf("%s\n", jason.name);//輸出jason }