typedef Node *List; // ❌ Node 尚未定義
typedef struct LNode {
int Data[40];
struct LNode *Last;
} Node;
typedef struct LNode *List; // ✅ 先宣告結構體指標類型
typedef struct LNode {
int Data[40];
struct LNode *Last;
} Node;
typedef 要求**右側類型在編譯時已完整可見**。第一種寫法 Node * 中的 Node 尚未定義,屬於「未完成類型」,編譯器拒絕。第二種 struct LNode * 直接使用結構體標籤,編譯器允許對未完成結構體類型建立指標。
// 合併宣告,清晰且避免順序問題
typedef struct LNode {
int Data[40];
struct LNode *Last;
} Node, *List;
typedef Node* List; 後再定義 struct Node {...}; (類別前向宣告),但 C 標準不支援。struct Node,類型別名 Node,指標別名 NodePtr 或 List。