頭文件中出現:
typedef void SeqList;
typedef void SeqListNode;
SeqList* SeqList_Create(int capacity);
.c 文件中嘗試 list->length = 0 報錯,提示「void 型別無此成員」。
這是 C 語言實現資訊隱藏/封裝的經典技巧:
typedef void SeqList; 讓使用者看到的是「指向 void 的指針」,完全不知內部結構。struct SeqList { int length; ...; },僅編譯單元可見。SeqList*,使用者無法直接存取成員。SeqList* 比 void* 更具語義,IDE 提示更友善。// 缺點:使用者可直接操作 list->length,破壞封裝
// 修改結構體需所有調用方重新編譯
typedef struct { int length; int capacity; } SeqList;