《C陷阱與缺陷》 Andrew Koenig 讀書筆記
1.1 =和==
編寫時(shí)建議:
將變量放到==
的后方沦零,編譯器可以檢測誤寫成=
的錯(cuò)誤
int a=1;
if(1==a){
//...
}
1.2 &和 | 不同于&&和 ||
1.3 語法分析的“貪心法”
c語言中符號有的只有一個(gè)字符長度(
/
*
=
)有的是多個(gè)字符(/*
==
)
編譯器在判斷時(shí)的規(guī)則是“
每個(gè)符號應(yīng)該包含盡可能多的字符
也就是說:
編譯器從左往右讀字符秒梳,如果該字符可能組成一個(gè)符號,再讀入下一個(gè)字符癣防,判斷這兩個(gè)符號是否可以組成一個(gè)字符,如果可以乌逐,繼續(xù)讀入下一個(gè)字符擎椰,重復(fù)上述判斷
舉例:
a---b
的實(shí)際意圖是:a-- -b
即先a--
然后將結(jié)果減b
而不是a- --b
a減去 減減b
注意:
在寫的時(shí)候加上空格,或者括號將更便于閱讀钟哥。
y=x/*p; //會(huì)解釋為注釋符號
y=x / *p; //正確解釋為 x除以*p迎献,因?yàn)?和空格不能組成一個(gè)符號
y=x/(*p); //正確解釋
1.4 整型常量
如果一個(gè)整型常量的第一個(gè)字符是數(shù)字0 ,該常量會(huì)被視作八進(jìn)制
- 159 是十進(jìn)制整數(shù)159
- 0159 是八進(jìn)制腻贰,是十進(jìn)制的141
注意:
在上下文中為了格式對齊吁恍,而無意中在十進(jìn)制前添加了0
046
046
125
1.5 字符與字符串
' '
的是字符
“ ”
的是字符串
-
單引號
括起來的一個(gè)字符代表一個(gè)整數(shù)
-
雙引號
括起來的一個(gè)字符代表一個(gè)指針
雙引號的字符串代表的是一個(gè)指向無名數(shù)組起始字符的指針,該數(shù)組被雙引號之間的字符以及額外的一個(gè)二進(jìn)制值為零的字符'\0'初始化