C語言的詞法規則
阿新 • • 發佈:2018-12-22
提綱:本文主要介紹了C語言中的詞法規則,包括字元、註釋、接續符、識別符號
一、字元
1、字符集都包括什麼?
標準規定字符集包括英語所有的大寫字母和小寫字母、數字0~9、以及! ” # % ’ * + , - . / : ; = ? \ ^ _ | ~ <> {} () []等符號。
2、分類
(1)普通字元
由單引號括起來的一個字元;
(2)字串常量
由雙引號將若干個字元括起來;
(3)符號常量
用一個符號名代表一個常量的,稱為符號常量;
例如:#define A 1
上面的程式碼表示,凡是程式中出現A的地方全部替換成1
(4)三字母詞(9個)
三字母詞是三個字元的序列,合起來表示一個字元,通常在C環境缺少字元的情亂下使用
常見的9個三字母詞:
??( 代表 [
??) 代表 ]
??! 代表 |
??< 代表 {
??> 代表 }
??’ 代表 ^
??= 代表 #
??/ 代表 \
??- 代表 ~
(5)轉義字元(13個)
當一個字元在一個程式設計環境中有特殊的意義,而想要使用這個特定的字元時,可能沒有辦法實現,這時候就提出了轉義字元的概念。
下面列出了常見的13個轉義字元
\’ 輸出字元’
\” 輸出字元”
\? 輸出字元?
\ 輸出字元\
\a 發出警告聲音
\b 將當前位置後退一個字元
該程式的輸出結果為
\f 將當前位置移動到下一頁的開頭
該程式的輸出結果為
\n 換行符,將當前結果移動到下一行的開頭
\r 回車符,將當前的位置移動到本行的開頭
\t 水平製表符,將當前位置移動到下一個tab位置
\v 垂直製表符,將當前位置移動到下一個垂直製表對齊處
\ddd 其中一個d代表一個八進位制數字,該輸出結果是與八進位制碼對應的字元
\xddd 其中一個d代表一個十六進位制數字,該輸出結果是與十六進位制碼對應的字元
二、註釋
1、註釋方式
C語言中有兩種註釋方式
(1)/**/
(2)//
2、註釋原則
(1)編譯器剔除掉註釋之後,會用空格來替換原有的註釋位置。
(2)編譯器把/當作一段註釋的開始,將/
(3)/總是與離他最近的/進行匹配。
(4)註釋/**/不允許巢狀。
(5)只要/和*之間沒有空格,編譯器就會把他當作註釋的開始。
(6)對加註釋的幾點建議
註釋應當簡潔明瞭;
一目瞭然的程式碼不加註釋;
註釋採用英文;
註釋可以在程式碼的同行或者上一行,但不能在程式碼的下一行。
(7)哪些地方十分有必要加註釋
對於全域性變數必須加註釋;
數值的單位一定要加註釋;
對變數的範圍給出註釋;
對函式的入口出口資料給註釋。
三、接續符
C語言中以\表示斷行,編譯器會自動將\剔除掉,跟在\後面的內容會自動接續到前一行
注:\之前和之後都不能有空格。
四、識別符號
識別符號就是函式、變數、型別等的名字
1、命名規則
識別符號由大小寫字母、數字、下劃線組成,不能以數字開頭。
2、注意事項
(1)識別符號雖然沒有長度限制,但是編譯器會自動忽略第31個字元後面的字元;
(2)ANSI C標準規定,C實現必須能夠區別出前6個字元不同的外部名稱(由連結器操縱的名字),而且,這個定義中不區分英語字母的大小寫。
(3)內部名和外部名
ANSI C標準規定,識別符號可以為任意長度,但外部名必須至少能由前6個字元唯一地區分,並且不區分大小寫。這裡外部名指的是在連結過程中所涉及的識別符號,其中包括檔案間共享的函式名和全域性變數名;
ANSI C標準還規定,內部名必須至少能由前31個字元唯一地區分。內部名指的是僅出現於定義該識別符號的檔案中的那些識別符號。C語言中的字母是有大小寫區別的,因此count Count COUNT是三個不同的識別符號。
(4)識別符號不能和C語言的32個關鍵字相同,也不能和使用者已編制的函式或C語言庫函式同名。
(5)看一個關於識別符號例題
例:\40的值是多少?\100、\x40、\x100、\0123、\x0123的值又分別是什麼?
我們分別將這些例子執行一下:
\40的值
分析:\ddd代表的是八進位制數,將其轉換為十進位制數再查詢ASCII表,便可以得到正確結果
八進位制數40轉換為十進位制數是32,通過ASCII字符集查詢到是空格字元,因此輸出結果為空格;
\100和\x40的值
分析:八進位制數100和十六進位制數40轉換為十進位制數是64,通過ASCII字符集查詢到是字元@,因此輸出結果為@;
\x100的值
分析:由圖可知,十六進位制數100超出了ASCII所能表示的範圍,因此出錯;
\0123的值
分析:由圖可知,輸出的結果為一個空行加上數字3,\0123是將其看成\012和3,所以列印結果為\n3,即換行和3;
\x0123
分析:在VS2013下,因為超出ASCII編碼範圍而出錯;
但是在有的編譯器下,對於\x0123,二進位制數為0000 0001 0010 0011,捨棄高八位,只表示低八位,ascll碼為35,即為 #。
最後附上ASCII編碼表: