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

C 語言 typedef 結構體指標宣告順序錯誤解析

     編輯:程式設計綜合問答

錯誤代碼

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;

補充

  • C++ 允許 typedef Node* List; 後再定義 struct Node {...}; (類別前向宣告),但 C 標準不支援。
  • 慣用命名:結構體標籤 struct Node,類型別名 Node,指標別名 NodePtr 或 List。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved