符號(token)指程式的乙個基本組成單元,其作用相當於乙個句子中的單詞,是程式的乙個基本的資訊單元。
組成符號的字串行就不相同,同一組字串行在某個上下文環境中屬於乙個符號,而在另乙個上下文環境中可能屬於完全不同的另乙個符號。
編譯器中負責將程式分解為乙個乙個符號的部分,一般稱為「詞法分析器」。
c語言中,符號之間的空白(空格,製表符,換行符)將被忽略。
1.1 =不同於==
c語言中,= 作為賦值運算子存在,可以作為一種操作符對待,== 作為比較運算子存在。
1.2 & 和 | 不同於 && 和 ||
& 是按位運算子與,&& 是邏輯運算子 與,| 是按位運算子或,|| 是邏輯運算子 或。
1.3 詞法分析中的「貪心法」
c語言中的某些符號只有乙個字元,稱為單字元符號,某些符號有多個字元,稱為多字元符號,那麼c編譯器如何區分乙個字元的邊界?基本規則是:每乙個符號應包含盡可能多的字元,即編譯器的輸入流截止至某個字元之前都已經被分解為乙個個的符號,那麼下乙個符號將應包括從該字元之後可能組成的乙個符號的最長字串,即為貪心法。
需要注意,除了字串和字元常量,符號中間不能夠嵌有空白(空格符,製表符,換行符)。
比如 a—b 和 a – - b 含義相同,但與 a - – b 含義不同。
比如 y = x/*p 的實際含義變成對 y 賦值 x ,然後注釋後面的內容,而實際想要的含義是 對 y 賦值 x除以指標 p 所指向的值的結果,故應該表述為 y= x / *p,或者更加清晰是 y= x/(*p)
1.4 整型常量
乙個整型常量的第乙個字元是數字 0 ,則將該常量視為八進位制數。
1.5字元與字串
c語言中 使用單引號引起來的乙個字元實際上代表乙個整數,整數值對應於該字元在編譯器採用的字符集中的序列值。
c語言中使用雙引號引起來的字串,實際代表的是乙個指向無名的字元陣列的起始字元的指標,該字元陣列被雙引號之間的字元以及乙個額外的二進位制為0的字元『\0』的初始化。注意這裡字元 『\0』 和 數值 0 相同,和字元 『0』 不同。
比如 printf(「hello world\n」); 和語句 char hello[ ]=; printf(hello); 是等效的。
在雙引號中括起來的字串中,注釋符 屬於字串的一部分,而在注釋**現的雙引號又屬於注釋的一部分。
C陷阱與缺陷第一章 詞法「陷阱」
1.不同於 為賦值運算,為比較 2.和 不同於 和 按位運算子 邏輯運算子 3.詞法分析中的 貪心法 c語言的某些符號,例如 只有乙個字元長,還有其他符號,例如 有多個字元。編譯器1將程式分解成符號的方法是,從左到右乙個字元乙個字元地讀入,如果判斷已經讀入的兩個字元組成的字串是否可能是乙個符號的組成...
第一章詞法陷阱
一些基本概念 符號 程式的乙個基本組成單元,作用相當於句子中的單詞,是程式的基本資訊單元 字串行 由符號組成,在不同的語境中可能會有不同的含義。詞法分析器 編譯器中將程式分解為符號的部分。1.if x big big x 1 這裡的符號依次是關鍵字 if x big 依次類推,符號間的空白 空格 製...
《C陷阱與缺陷》第一章
c陷阱與缺陷 第一章while c c t c n c getc f 此例項本意是遍歷檔案並且跳過空和一些換行符,製表符。但是由於第乙個 寫成了 則此程式變成了。將 c t c n 表示式的值賦給了c,並判斷c的值。由於c恆等於1則這會讀取到檔案最後。如果真的想要實現在判斷中使用 的情況應該寫成 i...