1. 程式人生 > >[C]關於extern與struct

[C]關於extern與struct

問題

我曾經很困惑,就是在兩個編譯單元當中,如何把一個單元中宣告的struct結構引入到另外一個單元中來,折騰了很久,後來發現這位大神的留言

不是這麼用的……

型別的定義和型別變數的定義不同,
型別定義只是描述一個型別,
是給編譯器看的,
不會產生可執行程式碼。
變數定義是指在執行檔案中真實得存在這麼一塊內容。

因為每個.c裡都要寫清楚型別定義很麻煩,
所以一般都把型別定義寫在.h裡
,而在.c裡採用簡單的寫法,如struct A a;
這樣定義變數,
不需把整個型別的描述再寫一遍。

--------------------------------
所以,struct型別定義放到 ser.h裡面,
ser.cpp
里加
struct str st_r;
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
}