函數作為 C 語言模組化核心,其聲明與定義規範直接影響編譯檢查力度與代碼可維護性。本文系統梳理 Turbo C 2.0 中函數聲明的經典/ANSI 兩種風格、定義語法、隱式聲明陷阱、庫函數頭文件機制,以及函數的全局可見性特性。
返回類型 函數名(); /* 僅給出返回類型,無參數信息 */
/* 完整形式:含參數名 */
返回類型 函數名(類型 形參名, 類型 形參名, ...);
/* 簡化形式:僅含類型 */
返回類型 函數名(類型, 類型, ...);
| 函數特徵 | 經典聲明 | ANSI 完整聲明 | ANSI 簡化聲明 |
|---|---|---|---|
| 整型函數,3 int 參數 | int func(); | int func(int x,int y,int z); | int func(int,int,int); |
| 字符指針函數,無參 | char *name(); | char *name(void); | char *name(void); |
| 無返回值,int+字符指針 | void student(); | void student(int n, char *str); | void student(int, char *); |
| 浮點函數,無參 | float calc(); | float calc(void); | float calc(void); |
關鍵細節:無參函數**必須**寫 (void),空括號 () 在 ANSI C 中表示「參數未指定」,而非「無參數」。
int**。int(如 float、char*、struct)將導致嚴重錯誤(棧平衡破壞、數值解釋錯誤)。int 返回函數**必須**在調用前顯式聲明(或定義前置)。返回類型 函數名(類型 形參名, 類型 形參名, ...)
{
/* 函數體:聲明、語句、巢狀調用 */
聲明部分;
執行語句;
return 表達式; /* 無返回值函數可省略或 return; */
}
{ } 包裹,構成獨立作用域。main 前、後、或其他文件中。.h):| 功能域 | 頭文件 | 代表函數 |
|---|---|---|
| 標準輸入輸出 | stdio.h | printf, scanf, fopen |
| 非標準 I/O (DOS) | io.h | open, read, write |
| 數學運算 | math.h | sin, cos, sqrt |
| 字符處理 | ctype.h | isalpha, toupper |
| 字符串/記憶體 | string.h | strcpy, memcpy |
| 動態記憶體 | stdlib.h / malloc.h | malloc, free |