第01章 詞法"陷阱"

《C陷阱與缺陷》 Andrew Koenig 讀書筆記


1.1 =和==

編寫時建議:
將變量放到==的后方,編譯器可以檢測誤寫成=的錯誤


int a=1;
if(1==a){
    //...
}

1.2 &和 | 不同于&&和 ||

1.3 語法分析的“貪心法”

c語言中符號有的只有一個字符長度(/ * =)有的是多個字符(/* ==)
編譯器在判斷時的規(guī)則是“
每個符號應(yīng)該包含盡可能多的字符

也就是說:
編譯器從左往右讀字符,如果該字符可能組成一個符號,再讀入下一個字符,判斷這兩個符號是否可以組成一個字符,如果可以,繼續(xù)讀入下一個字符,重復(fù)上述判斷

舉例:

a---b

的實際意圖是:a-- -b即先a--然后將結(jié)果減b

而不是a- --ba減去 減減b

注意: 在寫的時候加上空格,或者括號將更便于閱讀。

y=x/*p;   //會解釋為注釋符號

y=x / *p; //正確解釋為 x除以*p,因為/和空格不能組成一個符號

y=x/(*p); //正確解釋 

1.4 整型常量

如果一個整型常量的第一個字符是數(shù)字0 ,該常量會被視作八進制

  • 159 是十進制整數(shù)159
  • 0159 是八進制,是十進制的141

注意:
在上下文中為了格式對齊,而無意中在十進制前添加了0

046
046
125

1.5 字符與字符串

' '的是字符
“ ”的是字符串

  • 單引號括起來的一個字符代表一個整數(shù)
  • 雙引號括起來的一個字符代表一個指針

雙引號的字符串代表的是一個指向無名數(shù)組起始字符的指針,該數(shù)組被雙引號之間的字符以及額外的一個二進制值為零的字符'\0'初始化

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容