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

C 語言 typedef 詳解:不是函數,是「類型別名」神器

     編輯:C 語言問答

typedef 是關鍵字,不是函數

很多初學者見 typedef double sjd; 以為是函數聲明。**錯!** typedef 是 C 語言的**存儲類別說明符**,作用在**編譯階段**,為現有類型起個**新名字(別名)**,**不創建新類型**。

核心語法與示例

// 基本類型別名
typedef unsigned long long u64;
typedef int32_t i32;          // 標準整數類型別名 (需 )

// 指針別名 (極常用)
typedef char* pstr;           // pstr 等價於 char*
typedef void (*callback_t)(int); // 函數指針別名,簡化聲明

// 結構體別名 (慣用模式)
typedef struct Node {
    int data;
    struct Node* next;
} Node, *PNode;               // Node 為結構體類型,PNode 為指針類型

// 數組別名
typedef int IntArray10[10];   // IntArray10 代表 int[10]

typedef vs #define:關鍵區別

特性typedef#define
處理階段編譯器 (語義分析)預處理器 (文本替換)
作用域遵循 C 作用域規則全局文本替換,無作用域
指針處理typedef char* pstr; pstr a, b; → a,b 皆為 char*#define pstr char* pstr a, b; → a 是 char*,b 是 char (陷阱!)
類型安全編譯器檢查無,純文本
調試器可見性可見類型名不可見,展開後為原類型

實戰最佳實踐

  1. 標準整數類型: 專用 int32_t, uintptr_t 等 (<stdint.h>),跨平台移植無憂。
  2. 複雜類型簡化: 函數指針、嵌套結構體、多維數組,用 typedef 讓聲明可讀。
  3. 庫接口設計: 對外暴露 opaque pointer (不完全類型) 時,typedef 結構體指針隱藏實現細節。
  4. 命名慣例: 類型名以 _t 結尾 (POSIX 風格) 或大駝峰 NodePtr,與變量名區分。

**記住:typedef 不分配內存,不產生代碼,只是給編譯器一個「這個名字代表那個類型」的提示。**

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved