C陷阱與缺陷(一)詞法 陷阱

2021-06-13 05:29:12 字數 718 閱讀 4588

第一章 詞法"陷阱"

1、=不同於==

1)while(c=' '||c=='\t'||c=='\n')

賦值運算子=的優先順序低於邏輯運算子||,相當於' '||c=='\t'||c=='\n'賦給了c,條件永遠為真

2)if(x=y)應該寫成if((x=y)!=0)

對變數進行賦值並檢查該變數的新值是否為0

2、&和|不同於&&和||

按位運算子:&和|

邏輯運算子:&&和||

3、詞法分析中的"貪心法"

每乙個符號應該包含盡可能多的字元,從左向右

注:除了字串與字元常量,符號的中間不能嵌有空白(空格符、製表符和換行符)

例子:1)a---b與a -- - b相同,而與a - -- 不同

2)y=x/*p,本意是x除以p所指向的值,但是/*被理解為一段注釋

正確寫法:y=x / *p; 或者 y=x /(*p);

4、整型變數

有時候為了格式對齊,可能無意將十進位制寫成了八進位制

46=>>046

5、字元與字串

單引號''引起的乙個字元代表的是乙個整數,'a'的含義與97一樣

雙引號""引起的字串,代表的是乙個指向無名陣列起始字元的指標,後面有乙個二進位制值為0的字元'\0' 練習

1)a+++++b

解析為a ++ ++ + b,等價於((a++)++) + b,但是a++的結果不能作為左值

C 陷阱與缺陷 (一)詞法陷阱

碼字不易,對你有幫助點讚 關注支援一下作者 看更多乾貨,獲取第一時間更新 練習上傳至 0.不同於 當程式設計師本意是作比較運算時,卻可能無意中誤寫成了賦值運算。1.本意是檢查 x 與 y 是否相等 if x y break 實際上是將 y 的值賦值給了 x 然後再檢查該值是否為 0 2.本意是跳過檔...

C缺陷與陷阱 詞法陷阱

從較低的層面考察,程式是由符號 token 序列組成的,將程式分解成符號的過程,稱為詞法分析。這節主要分析在程式被詞法分析器分解成各個符號的過程中可能出現的問題。編譯器中負責將程式分解成乙個乙個符號的部分,一般稱之為詞法分析器。c語言中符號之間的空白 包括空格符,製表符和換行符 將被忽略。術語符號 ...

C陷阱與缺陷第一章 詞法「陷阱」

1.不同於 為賦值運算,為比較 2.和 不同於 和 按位運算子 邏輯運算子 3.詞法分析中的 貪心法 c語言的某些符號,例如 只有乙個字元長,還有其他符號,例如 有多個字元。編譯器1將程式分解成符號的方法是,從左到右乙個字元乙個字元地讀入,如果判斷已經讀入的兩個字元組成的字串是否可能是乙個符號的組成...