文章目錄
- 分隔符
- 注釋
- 注意
- 標識符
- 標識符的定義
- 標識符的命名要求
- 合法與非法標識符示例
- 關鍵字
- 關鍵字定義
- 關鍵字一覽(按功能分類)
- 空格
- 一、空格的作用:分隔令牌 (Tokens)
- 空格的使用場景
- 必須用空格分隔的情況
- 不能有空格的情況
分隔符
分隔符 | 名稱 | 主要用途 |
---|---|---|
; | 分號 | 語句結束符 |
, | 逗號 | 分隔變量、參數、表達式 |
{ } | 花括號 | 定義代碼塊(函數體、循環體、結構體等) |
( ) | 圓括號 | 函數調用、參數列表、表達式分組、包圍條件 |
[ ] | 方括號 | 數組聲明和索引 |
# | 井號 | 預處理指令的開始 |
: | 冒號 | switch語句中的case/default標簽、位域 |
… | 省略號 | 可變參數列表 |
在 C 程序中,分號 ; 是語句結束符,也就是說,每個語句必須以分號結束,它表明一個邏輯實體的結束。
printf("Hello, World! \n");
return 0;
個單獨的分號也可以作為一個空語句,表示什么都不做。例如:
表示do nothing
;
核心思想:分隔符是C語言的語法膠水,它們本身沒有計算意義,但決定了代碼如何被組織和解讀。忘記使用分隔符(尤其是分號;和花括號{})是最常見的語法錯誤來源之一。
注釋
C 語言有兩種注釋方式:
以 // 開始的單行注釋,這種注釋單獨占一行。
// 單行注釋
/* */ 這種格式的注釋可以單行或多行。
/*
這是一個多行注釋
可以跨越多行
*/
注意
1、不要在注釋內嵌套注釋。
2、注釋也不能出現在字符串或字符值中,在字符串或字符值中使用和注釋語法系統的字符需要使用轉移字符。
3、注釋中盡量不要出現多個?,在部分編譯器中會報錯。
標識符
標識符是C語言中最為基礎和重要的概念之一,它是程序員用來為各種元素命名的工具。
標識符的定義
標識符是由程序員自定義的名稱,用于標識變量、函數、數組、結構體、枚舉常量等程序元素。
標識符的命名要求
1、組成字符:
只能由字母(a-z, A-Z)、數字(0-9) 和下劃線(_) 三種字符組成。字母是區分大小寫的。
2、首字符:
第一個字符必須是字母或下劃線,不能是數字。
3、不能是關鍵字:
標識符的名稱不能與C語言的關鍵字(如 int, if, for, return 等)完全相同。
4、長度限制:
C標準規定,編譯器至少需要能夠識別標識符的前 63 個字符(C99標準之前是31個)。這意味著如果兩個標識符的前63個字符完全相同,編譯器可能會將它們視為同一個標識符。但在現代編譯器中,這個限制通常不是問題,但為了可讀性和可移植性,標識符也不宜過長。
合法與非法標識符示例
合法的標識符 | 非法的標識符 | 原因分析 |
---|---|---|
age | 2nd_place | 以數字開頭 |
_count | my-var | 包含了非法字符 - |
studentName | student name | 包含了非法字符 空格 |
MAX_SIZE | int | 與關鍵字 int 重名 |
isValid | a.b | 包含了非法字符 . |
temp123 | hello$world | 包含了非法字符 $ |
very_long_name_123 | return | 與關鍵字 return 重名 |
關鍵字
關鍵字定義
關鍵字,也稱為保留字,是C語言預先定義的、具有特殊含義和用途的英文單詞。
1、你不能將它們用作標識符(如變量名、函數名)。
2、它們的功能是固定的,編譯器會根據關鍵字執行特定的操作。
3、C語言的標準定義了關鍵字的數量,不同標準版本會略有不同
關鍵字一覽(按功能分類)
功能類別 | 關鍵字 | 數量 |
---|---|---|
數據類型 | char, int, float, double, void, short, long, signed, unsigned, struct, union, enum | 12 |
控制流 | if, else, switch, case, default, for, while, do, break, continue, return, goto, _Bool | 13 |
存儲類別 | auto, static, register, extern, _Thread_local | 5 |
運算符相關 | sizeof, const | 2 |
復雜類型與內存 | typedef, volatile, _Complex, _Imaginary, _Atomic | 5 |
函數說明符 | inline | 1 |
指針限定符 | restrict | 1 |
總計 | 44 |
C99 新增關鍵字:
_Bool _Complex _Imaginary inline restrict
C11 新增關鍵字:
_Alignas _Alignof _Atomic _Generic _Noreturn
_Static_assert _Thread_local
空格
C語言中的空格也是一種分隔符,用于幫助編譯器區分代碼中的不同元素。它本身(在絕大多數情況下)不會影響程序的邏輯,但會極大地影響代碼的可讀性。
一、空格的作用:分隔令牌 (Tokens)
C編譯器在解析代碼時,會將其分解成一系列的“令牌”或“單詞”,例如int, main, (, ), {, printf, “Hello World”, ;等。
空格的核心作用就是用來分隔這些令牌,讓編譯器能正確理解你的代碼意圖。
代碼示例:
// 沒有空格或分隔不清(無法編譯)
intmain(void){intx=10;printf("%d",x);return0;}// 等價于(有空格,可編譯)
int main(void) { int x = 10; printf("%d", x); return 0; }
在第一行中,intmain會被編譯器視為一個整體,它不認識這個“單詞”,所以會報錯。同樣,intx也會被當成一個未知的標識符。添加空格后,int, main, int, x都被清晰地分開了,編譯器就能正確識別它們。
空格的使用場景
當兩個令牌(Keywords, Identifiers, Constants)緊挨在一起時,必須用空格(或制表符、換行符)分隔。
必須用空格分隔的情況
關鍵字和標識符之間:
int age; // 正確:`int` 和 `age` 被空格分開
intage; // 錯誤:編譯器會尋找名為 "intage" 的變量
標識符和標識符之間 (在聲明多個變量時,非必須用空格):
int width, height; // 正確:`width,` 和 `height` 被空格分開
int width,height; // 逗號本身是分隔符,空格可選,但加上更清晰
不能有空格的情況
在某些結構中加入空格會導致錯誤或完全改變含義。
變量名、函數名等標識符內部:
int my variable; // 錯誤:這聲明了兩個變量 `my` 和 `variable`
int my_variable; // 正確:用下劃線連接成一個標識符
預處理指令中 # 和其后指令之間 (一些現代編譯器放寬了此限制,但傳統上不行):
# include <stdio.h> // 錯誤或警告
#include <stdio.h> // 正確:`#` 和 `include` 之間不能有空格
運算符的組成部分之間:
+ + i // 這是兩個 `+` 運算符
++i // 這是一個 `++` 自增運算符
數字常量的內部:
100 000 // 錯誤:這是兩個整數 100 和 000
100000 // 正確:一個整數
// 注意:C23標準支持用單引號作為分隔符,如:100'000,但這不是空格。