首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言頭文件封裝技巧:typedef void 隱藏結構體細節

     編輯:程式設計綜合問答

代碼現象

頭文件中出現:

typedef void SeqList;
typedef void SeqListNode;
SeqList* SeqList_Create(int capacity);

.c 文件中嘗試 list->length = 0 報錯,提示「void 型別無此成員」。

設計意圖:不透明指針模式

這是 C 語言實現資訊隱藏/封裝的經典技巧:

  1. 頭文件僅宣告不完整型別:typedef void SeqList; 讓使用者看到的是「指向 void 的指針」,完全不知內部結構。
  2. 實現細節隱藏在 .c 文件:內部定義真實結構體 struct SeqList { int length; ...; },僅編譯單元可見。
  3. 介面函數操作指針:所有操作透過函數指標傳遞 SeqList*,使用者無法直接存取成員。

優勢

  • 二進制相容:修改結構體成員不需重新編譯調用方,只需重新編譯庫並替換 .so/.dll。
  • 防止誤用:編譯器阻擋直接存取內部欄位,強制走介面函數。
  • 命名可讀性:SeqList* 比 void* 更具語義,IDE 提示更友善。

對比:若頭文件直接定義結構體

// 缺點:使用者可直接操作 list->length,破壞封裝
// 修改結構體需所有調用方重新編譯
typedef struct { int length; int capacity; } SeqList;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved