掌握 C 程序的「骨架結構」是編寫正確代碼的前提。本文以一個完整的 Turbo C 交互式示例程序為載體,提煉出源程序的六大結構特點,並對比說明各組成部分的角色與規範。
/* Example program of Turbo C */
#include /* 包含文件說明 */
void lgc(void); /* 子函數聲明 */
char answer; /* 全局變量定義 */
int main() /* 主函數定義 */
{
char a; /* 局部變量定義 */
clrscr();
gotoxy(12, 3);
puts("Welcome to Turbo C 2.0!");
gotoxy(15, 13);
printf("--Exit");
gotoxy(15, 15);
printf("--Continue");
while (1) {
a = getch();
if (a == 27) break; // Esc 退出
if (a == 13) { // Enter 繼續
lgc();
if (answer == 'y' || answer == 'Y') {
gotoxy(23, 14);
puts("Please Write to the Company");
getch();
break;
}
}
}
return 0;
}
void lgc(void) /* 子函數定義 */
{
clrscr();
gotoxy(12, 8);
printf("The Excellent Selection!");
gotoxy(21, 12);
printf("Do you have any question?(Y/N)");
answer = getche();
}
| # | 特點 | 範例佐證 | 規範說明 |
|---|---|---|---|
| 1 | **主體小寫** | 關鍵字、函數名、變量名均小寫 | C 語言區分大小寫,習慣小寫;宏/常量常用大寫 |
| 2 | **語句以分號結尾** | char a; clrscr(); return 0; | 分號是語句終止符,**聲明、表達式語句、跳轉語句**均需;結構體定義末尾、函數首部、{} 後**不加**分號 |
| 3 | **唯一主函數 main()** | int main() | 程序入口,**有且僅有一個**;返回 int 向作業系統報狀態 |
| 4 | **函數體用花括號包裹** | main() { ... } lgc() { ... } | { 開始、} 結束,構成**複合語句/塊**,定義作用域邊界 |
| 5 | **完整程序五大組成部分** | 見下表 | 順序慣例:包含文件 → 函數聲明 → 全局變量 → main → 子函數 |
| 6 | **註釋 /* */ 可跨行、可嵌套標記代碼** | /* Example ... */ /* 包含文件說明 */ | 編譯器**完全忽略**註釋內容;可用於文檔、暫時屏蔽代碼 |
| 部分 | 範例內容 | 作用 | 備註 |
|---|---|---|---|
| 包含文件 | #include <stdio.h> | 引入庫函數原型、宏定義、類型定義 | 系統頭文件用 < >,用戶頭文件用 "" |
| 用戶函數聲明 | void lgc(void); | 告知編譯器函數簽名,便於調用檢查 | ANSI 原型聲明推薦;也可前置定義省略聲明 |
| 全局變量定義 | char answer; | 跨函數共享數據,靜態存儲期 | 慎用,增加耦合;優先傳參 |
| 主函數 | int main() { ... } | 程序入口,調度子函數 | 局部變量、庫函數調用、控制流、子函數調用 |
| 子函數 | void lgc(void) { ... } | 模組化功能單元 | 可在 main 前/後、同/異文件 |
int main() {
/* 1. 局部變量定義 */
char a;
/* 2. 庫函數調用 */
clrscr(); gotoxy(...); puts(...); printf(...); getch(); getche();
/* 3. 控制流程語句 */
while (1) { if (...) break; if (...) { ... } }
/* 4. 用戶函數調用 */
lgc();
return 0;
}
main **必須**有返回類型 (C99 起強制 int),舊代碼隱式 int 已廢棄。{ } **成對出現**,缺一不可;推薦 **K&R 風格** (int main() {) 或 **Allman 風格** (int main()\n{),團隊統一即可。if (x); { ... } 導致空語句)。/* /* */ */ 內層 */ 結束外層),需屏蔽大段代碼請用 #if 0 ... #endif。「包含→聲明→全局→主函數→子函數」五部曲,「主函數唯一、花括號成對、分號終結、小寫主體、註釋忽略」五大特點。這就是 C 程序的**骨架**。熟練掌握骨架,再填充變量、運算符、控制流、函數、指針、結構等「血肉」,一個完整的 C 程序就誕生了。