C 聲明由 類型說明符 + 聲明器 組成。聲明器是理解難點,包含:
char * const *(*next)();next 被括號包裹 → next 是指針char * const → 指向 char 的常量指針結論:next 是一個指針,指向一個函數,該函數返回一個「指向 char 的常量指針」。
int * (*p[])();p 在括號內 → p 是指針int * → 返回 int* 的函數結論:p 指向一個數組,數組元素是「參數為空、返回 int* 的函數指針」。
void (*signal(int sig, void(*func)(int)))(int);signal 在括號內 → signal 是函數int sig 和 void(*func)(int)(函數指針)void (int) → 參數 int、返回 void 的函數結論:signal 是一個函數,接受信號值與處理函數指針,返回前一個處理函數指針(參數 int、返回 void)。這正是標準庫 `signal()` 的原型。
cdecl 命令行工具:cdecl> explain char * const *(*next)()掌握「從名字起步、括號優先、後綴後前綴、const 就近綁定」四字訣,配合工具驗證,任意複雜聲明皆可秒懂。