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