C結構體的宣告(extern)與呼叫的方式

2021-08-28 09:57:14 字數 854 閱讀 6499

要求如下,在.h檔案中這樣定義:

typedef struct typfnt_gb16       // 漢字字模資料結構

;struct typfnt_gb16 code gb_16 =     // 資料表

;

同時需要在多個.c檔案中使用該struct, 但是多次include 該.h檔案提示重複定義,應該修改如下:

新建乙個xx.h和xx.c檔案

在xx.h檔案中定義該結構體,同時對結構體變數作extern:

typedef struct typfnt_gb16          // 漢字字模資料結構

;extern struct typfnt_gb16 code gb_16;

在xx.c檔案中include該.h檔案,同時作結構體變數的初始化:

#include "xx.h"

struct typfnt_gb16 code gb_16 =         // 資料表

;

在其它.c檔案中需要使用該結構體時,直接include .h檔案即可這樣編譯通過。實際上結構體是一種資料型別,.h檔案定義了一種型別的結構體,並宣告為extern形式允許外部呼叫它,而初始化code gb_16 這個結構體應當在.c檔案中進行。

型別的定義和型別變數的定義不同,型別定義只是描述乙個型別,是給編譯器看的,不會產生可執行**。變數定義是指在執行檔案中真實的存在這麼一塊內容。因此,型別定義可以重複出現也沒關係,型別變數是不能在多個.c中出現,否則就是重複定義。因為每個.c裡都要寫清楚型別定義很麻煩,所以一般都把型別定義寫在.h裡,而在.c裡採用簡單的寫法。

C語言 結構體宣告與sizeof計算結構體大小

1.結構體的宣告 struct 結構體名 成員表列 例如 struct student int main struct student s2 struct student s3 struct student malloc sizeof struct student scanf s d c s2.na...

c tricks POD與結構體宣告

請看下面這個結構體定義 struct mystruct s是 pod struct ss ss不是 podstruct sss ss s不是pod 在c 0x 中,pod 被定義為可以簡單複製的,型別普通的,並且擁有可以應對多種 pod原先就能支援的操作的標準變數位址布局 pod的定義和以前差不多 ...

C 中結構體的宣告

定義 結構是使用者自定義的值型別 樣式 struct pair struct pair struct pair 可以有結尾分號 注意事項 結構是c 程式設計師用來定義自己的值型別的最普遍的機制。結構比列舉更強大,因為它提供函式 字段 建構函式 操作符和訪問控制。結構成員的預設訪問許可權是privat...