
- C 程式設計教程
- C - 首頁
- C 語言基礎
- C - 概述
- C - 特性
- C - 歷史
- C - 環境搭建
- C - 程式結構
- C - Hello World
- C - 編譯過程
- C - 註釋
- C - 詞法單元
- C - 關鍵字
- C - 識別符號
- C - 使用者輸入
- C - 基本語法
- C - 資料型別
- C - 變數
- C - 整數提升
- C - 型別轉換
- C - 型別強制轉換
- C - 布林值
- C 語言中的常量和字面量
- C - 常量
- C - 字面量
- C - 轉義序列
- C - 格式說明符
- C 語言中的運算子
- C - 運算子
- C - 算術運算子
- C - 關係運算符
- C - 邏輯運算子
- C - 位運算子
- C - 賦值運算子
- C - 一元運算子
- C - 自增和自減運算子
- C - 三元運算子
- C - sizeof 運算子
- C - 運算子優先順序
- C - 其他運算子
- C 語言中的決策
- C - 決策語句
- C - if 語句
- C - if...else 語句
- C - 巢狀 if 語句
- C - switch 語句
- C - 巢狀 switch 語句
- C 語言中的迴圈
- C - 迴圈
- C - while 迴圈
- C - for 迴圈
- C - do...while 迴圈
- C - 巢狀迴圈
- C - 無限迴圈
- C - break 語句
- C - continue 語句
- C - goto 語句
- C 語言中的函式
- C - 函式
- C - 主函式 (main 函式)
- C - 按值呼叫函式
- C - 按引用呼叫函式
- C - 巢狀函式
- C - 可變引數函式
- C - 使用者自定義函式
- C - 回撥函式
- C - return 語句
- C - 遞迴
- C 語言中的作用域規則
- C - 作用域規則
- C - 靜態變數
- C - 全域性變數
- C 語言中的陣列
- C - 陣列
- C - 陣列的特性
- C - 多維陣列
- C - 將陣列傳遞給函式
- C - 從函式返回陣列
- C - 變長陣列
- C 語言中的指標
- C - 指標
- C - 指標和陣列
- C - 指標的應用
- C - 指標運算
- C - 指標陣列
- C - 指向指標的指標
- C - 將指標傳遞給函式
- C - 從函式返回指標
- C - 函式指標
- C - 指向陣列的指標
- C - 指向結構體的指標
- C - 指標鏈
- C - 指標與陣列的區別
- C - 字元指標和函式
- C - 空指標
- C - void 指標
- C - 野指標
- C - 解引用指標
- C - 近指標、遠指標和巨指標
- C - 指標陣列的初始化
- C - 指標與多維陣列的區別
- C 語言中的字串
- C - 字串
- C - 字串陣列
- C - 特殊字元
- C 語言中的結構體和聯合體
- C - 結構體
- C - 結構體和函式
- C - 結構體陣列
- C - 自引用結構體
- C - 查詢表
- C - 點 (.) 運算子
- C - 列舉 (enum)
- C - 結構體填充和壓縮
- C - 巢狀結構體
- C - 匿名結構體和聯合體
- C - 聯合體
- C - 位域
- C - typedef
- C 語言中的檔案處理
- C - 輸入/輸出
- C - 檔案 I/O (檔案處理)
- C 預處理器
- C - 預處理器
- C - 編譯指示
- C - 預處理器運算子
- C - 宏
- C - 標頭檔案
- C 語言中的記憶體管理
- C - 記憶體管理
- C - 記憶體地址
- C - 儲存類別
- 其他主題
- C - 錯誤處理
- C - 可變引數
- C - 命令執行
- C - 數學函式
- C - static 關鍵字
- C - 隨機數生成
- C - 命令列引數
- C 程式設計資源
- C - 問答
- C - 快速指南
- C - 速查表
- C - 有用資源
- C - 討論
C - 基本語法
在 C 程式設計 中,“語法”指的是為程式設計師編寫特定應用程式原始碼而制定的規則集。雖然 C 語言中的每個關鍵字都推薦使用特定的語法,但在開發 C 程式時,仍需要遵循某些通用規則。
一個典型的 C 程式原始碼包含以下元素:
/*Hello World program*/ // Comments #include <stdio.h> // Header File int a=10; // Global declarations // The main function int main() { char message[] = "Hello World"; // Local variable printf("%s", message); return 0; }
C 語言中的詞法單元
C 程式由各種 詞法單元 組成,一個詞法單元可以是關鍵字、識別符號、常量、字串字面量或符號。例如,以下 C 語句包含五個詞法單元:
printf("Hello, World! \n");
各個詞法單元是:
printf ( "Hello, World! \n" );
C 編譯器 會識別詞法單元是關鍵字、識別符號、註釋、字面量、運算子,還是任何其他已識別的特殊符號。這個過程由編譯過程的第一階段中的詞法分析器完成。
C 語言中的識別符號
C 識別符號 是用於標識變數、函式或任何其他使用者定義項的名稱。識別符號以字母 A 到 Z、a 到 z 或下劃線 '_' 開頭,後跟零個或多個字母、下劃線和數字 (0 到 9)。
C 語言規定了形成變數、函式或其他程式設計元素名稱的某些規則。它們不是關鍵字。識別符號必須以字母或下劃線開頭,並且除了字母、數字和下劃線之外,不能包含任何其他字元。
C 語言不允許在識別符號中使用諸如 @、$ 和 % 等標點符號。C 語言是區分大小寫的程式語言。因此,Manpower 和 manpower 在 C 語言中是兩個不同的識別符號。以下是一些可接受的識別符號示例:
mohd zara abc move_name a_123 myname50 _temp j a23b9 retVal
C 語言中的關鍵字
C 語言最重要的部分是它的關鍵字。關鍵字 是具有預定義含義和規定的使用語法的保留字。在 ANSI C 中,所有關鍵字都使用小寫字母。程式設計師需要選擇正確的關鍵字來構建問題的解決方案。學習程式設計基本上就是學習正確使用關鍵字。
以下列表顯示了 C 語言中的保留字。這些保留字不能用作常量、變數或任何其他識別符號名稱。
auto | else | long | switch |
break | enum | register | typedef |
case | extern | return | union |
char | float | short | unsigned |
const | for | signed | void |
continue | goto | sizeof | volatile |
default | if | static | while |
do | int | struct | _Packed |
double |
除了本章中解釋的基本語法之外,C 語言中的每個關鍵字都具有明確定義的語法。每個關鍵字的用法將在後續章節中解釋。
C 語言中的分號
在 C 程式中,分號是語句終止符。也就是說,每個語句都必須以分號結尾。它表示一個邏輯實體的結束。
以下是兩個不同的語句:
printf("Hello, World! \n"); return 0;
由於分號“;”只是 C 語句的定界符,因此 C 程式中的一行物理行中可能有多個語句。同樣,單個語句也可能跨越多行原始碼。
以下行在 C 語言中完全有效。在一行中,有多個語句:
int a=10; if (a>=50) printf("pass"); else printf("fail");
即使語句跨越多行,以下程式碼也是有效的:
if (a>=50) printf("pass"); else printf("fail");
C 語言中的註釋
註釋 就像 C 程式中的輔助文字,編譯器會忽略它們。它們以 /* 開頭,以 */ 結尾,如下所示:
/* my first program in C */
註釋中不能巢狀註釋,並且它們不會出現在字串或字元字面量中。
原始碼
C 程式是一個文字檔案,包含一系列語句。該檔案必須以 .c 為副檔名。C 編譯器只識別 .c 檔案進行編譯。雖然字串字面量可以包含任何 Unicode 字元,但 C 語言的關鍵字和其他識別符號只使用英文字母。
main() 函式
每個 C 程式都必須有一個(且只有一個)main() 函式,編譯器從這裡開始執行程式碼。但是,main() 函式不必位於 .c 檔案程式碼的開頭。C 程式中可以有任意數量的函式。如果一個函式在其定義之前呼叫任何其他函式,則應該對其進行前向宣告。
標頭檔案
除了關鍵字之外,C 程式通常還需要從標頭檔案庫中呼叫預定義函式。所需的 標頭檔案使用 #include 預處理器指令 匯入。所有 #include 語句都必須位於原始碼的開頭。
變數宣告
C 語言是一種靜態型別語言。它要求在使用程式中出現的變數之前對其進行宣告。變數可以在全域性範圍內(即在任何函式之外)或在函式的作用域內區域性宣告。變數只能儲存其宣告型別的變數。這是 C 語言的重要規則之一。
C 程式中的語句
語句是程式的基本組成部分。預設情況下,`main()` 函式中的語句按從上到下的順序執行。順序由條件語句或迴圈結構控制。作為基本語法規則,每個語句結尾必須有分號 (;)。
C程式中的空白字元
編譯原始碼時,編譯器會忽略空白字元。在C語言中,空白字元是指空格、製表符、換行符和註釋。雖然可以使用它們來提高程式碼的可讀性,但它們對編譯器幾乎沒有意義(除非它們是字串字面量的一部分,出現在雙引號內)。僅包含空白字元(可能還有註釋)的行被稱為空行,C編譯器會完全忽略它。
空白字元將語句的一個部分與另一個部分隔開,並使編譯器能夠識別語句中一個元素(例如 int)的結束位置和下一個元素的開始位置。因此,在以下語句中:
int age;
為了使編譯器能夠區分 `int` 和 `age`,`int` 和 `age` 之間必須至少有一個空白字元(通常是一個空格)。另一方面,在以下語句中:
fruit = apples + oranges; // get the total fruit
“fruit”和“=”之間,或“=”和“apples”之間不需要空白字元,儘管您可以隨意新增一些以提高可讀性。
C語言中的複合語句
通常,您需要將一個連貫的語句塊定義為單個程式設計邏輯單元。例如,如果某個邏輯表示式為真,您可能希望執行多個語句,或者在迴圈塊中執行多個語句。同樣,使用者定義的函式可能包含多個語句。在這種情況下,語句被組合在一起形成複合語句。C語言使用花括號進行這種分組。
{ Statement1; Statement2; . . . . . . }
在以下程式碼中,if 和 else 部分各自包含一個語句塊。
int marks = 40; if (marks<50) { printf("Result: Fail\n"); printf ("Better Luck next time"); } else { printf("Result: Pass\n"); printf("Congratulations"); }
花括號也用於函式定義
float area_of_square(float side) { float area = pow(side,2); return area; }
使用結構體、聯合體或列舉定義自定義型別也需要用花括號將多個語句組合在一起。
struct student { char name[20]; int marks, age; };
花括號還可以宣告陣列,如下所示:
int marks[ ]={50,56,76,67,43};