《C語言程式設計:現代方法(第2版)(K.N.King 著)》學習筆記五:C語言基本概念(4)
阿新 • • 發佈:2018-12-13
2.7 識別符號
- 在編寫程式時,需要對變數、函式、巨集和其他實體進行命名。這些名字稱為識別符號(identifier)。在C語言中,識別符號可以含有字母、數字和下劃線,但是必須以字母或者下劃線開頭。在C99中,識別符號還可以使用某些“通用字元名”,這在以後的學習中會介紹。
- 這是合法識別符號的一些示例:
times10
、get_next_char
、_done
。 - 這是不合法識別符號的一些示例:
10times
(以數字而不是字母或下劃線開頭)、get-next-char
(包含了減號而不是下劃線)。 - C語言是區分大小寫的。也就是說,在識別符號中C語言區別大寫字母和小寫字母。例如,這些識別符號全是不同的:
job
joB
、jOb
、jOB
、Job
、JoB
、JOb
、JOB
。這 8 個識別符號可以同時使用,且每一個都有完全不同的意義。(看起來使人困惑!)除非識別符號之間存在某種關聯,否則明智的程式設計師會盡量使識別符號看起來各不相同。 - 因為C語言是區分大小寫的,許多程式設計師都會遵循在識別符號中只使用小寫字母的規範(巨集命名除外)。為了使名字清晰,必要時還會插入下劃線,例如
symbol_table
。 - 而另外一些程式設計師則避免使用下劃線,他們的方法是把識別符號中的每個單詞用大寫字母開頭,例如
SymbolTable
。 - C語言對識別符號的最大長度沒有限制,所以不用擔心使用較長的描述性名字。
- 下表中的所有關鍵字
- 因為C語言是區分大小寫的,所以程式中出現的關鍵字必須嚴格按照表 2-1 所示的格式全部採用小寫字母。(C99關鍵字
_Bool
、_Complex
和_Imaginary
例外。)標準庫中函式(如 printf 函式)的名字也只能包含小寫字母。 - 請注意有關識別符號的其他限制。某些編譯器把特定的識別符號(如 asm) 視為附加關鍵字。屬於標準庫的識別符號也是受限的。誤使用這些名字可能會導致在編譯或連結時發生錯誤。以下劃線開頭的識別符號也是受限的。
2.8 C程式的書寫規範
- 我們可以把C程式看成是一連串記號(token)
printf("Height: %d\n", height);
是由 7 個記號組成的:printf
、(
、"Height: %d\n"
、,
、height
、)
、;
。(其中第一個和第五個記號都是識別符號,第三個記號是字串字面量,而第二個、第四個、第六個和第七個記號都是標點符號。) - 大多數情況下,程式中記號之間的空格數量沒有嚴格要求。除非兩個記號合併後會產生第三個記號,否則在一般情況下記號之間根本不需要留有間隔。
- 事實上,我們可以把整個 main 函式都放在一行中。但是,不能把整個程式寫在一行內,因為每條預處理指令都要求獨立成行。
- 但用這種方式壓縮程式並不是個好主意。事實上,新增足夠的空格和空行可以使程式更便於閱讀和理解。幸運的是,C語言允許在記號之間插入任意數量的間隔,這些間隔可以是空格符、製表符和換行符。這一規則對於程式佈局有如下積極意義:
- 語句可以分開放在任意多行內。
- 記號間的空格使我們更容易區分記號。基於這個原因,作者通常會在每個運算子的前後都放上一個空格。此外,作者還會在每個逗號後邊放一個空格。某些程式設計師甚至在圓括號和其他標點符號的兩邊都加上空格。
- 縮排有助於輕鬆識別程式巢狀。
- 空行可以把程式劃分成邏輯單元,從而使讀者更容易辨別程式的結構。
- 還要注意一下記號
{
和記號}
的放置方法:記號{
放在了 main() 的下面,而與之匹配的記號}
則放在了獨立的一行中,並且與記號{
排在同一列上。把記號}
獨立放在一行中可以便於在函式的末尾插入或刪除語句,而將記號}
與記號{
排在一列上是為了便於找到 main 函式的結尾。 - 最後要注意的是:雖然可以在記號之間新增額外的空格,但是絕不能在記號內新增空格,因為這樣做可能會改變程式的意思或者引發錯誤。儘管把空格加在字串字面量中會改變字串的意思,但這樣做是允許的。然而,把換行符加進字串中(換句話說,就是把字串分裂成兩行)卻是非法的。把字串從一行延續到下一行需要一種特殊的方法才可以實現。這種方法將在以後的章節中學到。