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

C語言 typedef 完全指南:類型別名、可移植性與複雜聲明簡化

     編輯:關於C語言

typedef 基本概念

typedef 為現有類型建立別名,不產生新類型。語法類似儲存類別(如 static、extern),不可與其並用。

與 #define 差異

特性typedef#define
作用對象僅限類型值、運算式、類型皆可
處理階段編譯器預處理器
靈活度高(支援複雜類型)低(單純文字替換)

核心優勢

1. 增強可讀性

typedef unsigned int BYTE;
BYTE x, y[10], *z;  // 一眼看出是位元組相關變數

2. 提升可移植性

// 系統 A: typedef unsigned long time_t;
// 系統 B: typedef unsigned int time_t;
// 移植時只需修改 typedef 定義
time_t time(time_t *);

3. 簡化複雜聲明

// 結構體別名
typedef struct { double x; double y; } Point;
Point p1 = {3.0, 6.0};

// 函數指標別名
typedef int (*CompareFunc)(const char *, const char *);
CompareFunc cmp = strcmp;

作用域規則

  • 函數內部定義 → 區域作用域
  • 函數外部定義 → 全域作用域

複雜聲明解讀:右左法則

從變數名出發,先右後左,遇括號反向:

int (*func)(int *p);      // func 是函數指標,指向參數 int* 回傳 int 的函數
int (*func[5])(int *);    // func 是 5 元素陣列,元素為函數指標

進階範例:signal 函數原型簡化

// 原始複雜宣告
void (*signal(int signr, void (*handler)(int)))(int);

// 兩次 typedef 簡化
typedef void SigFunc(int);
SigFunc *signal(int signr, SigFunc *handler);

善用 typedef 讓程式碼更清晰、可維護、可移植。

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