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

C語言聲明解析與 typedef 完全指南

     編輯:關於C

C 聲明優先級規則(右左法則)

  1. 從變數名開始。
  2. 優先級:括號 > 後綴 () [] > 前綴 *。
  3. const/volatile 緊跟類型修飾類型,否則修飾左側指標。

實戰解析

char * const *(*next)();
// next 是指標
// 指向函數
// 函數返回指標
// 該指標指向 char 類型的常量指標

typedef 核心作用

為現有類型引入別名,不創建新類型。簡化複雜聲明,增強可讀性。

經典案例:signal 函數指標

// 原始聲明
void (*signal(int sig, void (*func)(int)))(int);

// typedef 簡化
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);

C 名字空間

名字空間包含範例
標籤名goto 標籤label:
標籤struct/union/enum 標籤struct Tag
成員名各結構/聯合獨立s.member
普通識別符變數、函數、typedef 名int x; typedef int T;

不同空間可重名,同一空間內必須唯一。

typedef 陷阱與宏區別

陷阱 1:結構標籤 vs typedef 名


typedef struct fruit { int weight; } fruit;  // 同時定義標籤 fruit 和類型 fruit
struct fruit a;  // 結構變數
fruit b;         // typedef 類型變數

struct veg { int weight; } veg;  // 標籤 veg + 變數 veg(非類型)
struct veg c;    // OK
veg d;           // 錯誤:veg 是變數非類型

陷阱 2:擴展性


#define peach int
unsigned peach x;  // OK → unsigned int x;

typedef int peach;
unsigned peach y;  // 錯誤:typedef 名不可再加修飾符

陷阱 3:多變數聲明一致性


#define int_ptr int *
int_ptr a, b;  // 展開 → int *a, b;  a 是指標,b 是 int

typedef int *int_ptr;
int_ptr a, b;  // 皆為 int*

枚舉類型


enum sizes { small = 7, medium, large = 10, humungous };
// small=7, medium=8, large=10, humungous=11

優勢:調試器中符號可見,#define 符號編譯期丟失。

總結

  • 掌握聲明優先級,讀懂複雜指標聲明。
  • 用 typedef 封裝函數指標、結構體等複雜類型。
  • 理解名字空間隔離,避免衝突。
  • 區分 typedef 與宏:類型安全、聲明一致性、不可擴展。
  • 枚舉優於宏定義常數(調試可見、類型檢查、作用域限制)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved