本文爲我的讀書筆記,僅供記錄學習過程當中遇到的往後須要留意的問題,若有相關版權問題請及時通知做者。
全部傳遞給函數的參數都是按值傳遞的。
C語言約定:字符串就是一串以nul字節結尾的字符。
爲何用一個整型來讀取字符。由於EOF是一個整型值,位數比字符類型要多,用整型來讀取字符能夠防止輸入讀取的字符意外的被解釋爲EOF
要注意避免三字母詞trigrph
??( |
[ |
??< |
{ |
??= |
# |
??) |
] |
??> |
} |
??/ |
\ |
??! |
| |
??' |
^ |
??- |
~ |
字符常量的類型老是int
字面值就是常量,翻譯不一樣
浮點數字面值在缺省狀況下都是doble類型的。
使用typedef而不是#define來建立新的類型名,由於#define沒法正確地處理指針類型
聲明變量時,若是變量的值不會被修改,你應當在生命中使用const關鍵字。
應當避免在嵌套的代碼塊中出現相同的變量名。
當組成一個程序的各個源文件分別被編譯以後,全部的目標文件以及那些從一個或多個函數庫中引用的函數連接在一塊兒,造成可執行程序。標示符的鏈接屬性linkage決定如何處理在不一樣文件中出現的標識符。
連接屬性一共有3中——external外部、internal內部和none無。沒有鏈接屬性的標識符老是被當作單獨的個體,也就是說該標識符的多個聲明被當作獨立不一樣的實體。屬於internal連接屬性的標識符在同一個源文件內的全部聲明中都指向同一個實體,但位於不一樣源文件的多個聲明則分屬不一樣的實體。external連接屬性的標識符不論聲明多少次、位於幾個源文件都表示同一個實體。
若是某個聲明在正常狀況下具備external連接屬性,在它前面加上static關鍵字可使它的連接屬性變爲internal。static只對缺省鏈接屬性爲external的聲明纔有改變連接屬性的效果。(全局函數全局變量)
當extern關鍵字用於源文件中一個標識符的第一次聲明時,它指定該標識符具備external的鏈接屬性。可是,若是它用於該標識符的第二次或之後的聲明時,它並不會更改由第一次聲明所指定的連接屬性。
做用域/連接屬性和存儲類型總結
變量類型 |
聲明位置 |
是否存於堆棧 |
做用域 |
若是聲明爲static |
全局 |
全部代碼塊以外 |
否 |
聲明處到文件尾 |
不容許從其餘源文件訪問 |
局部 |
代碼塊起始處 |
是 |
整個代碼塊 |
變量不存儲於對戰中,它的值在程序整個執行期一直保持 |
形式參數 |
函數頭部 |
是 |
整個函數 |
不容許 |
爲了保持最佳的可移植性,把字符的值限制在有符號和無符號字符範圍的交集以內,或者不要再字符上執行算數運算。
除了實體的具體定義位置以外,在它的其餘生命爲止都是用extern關鍵字。
及時switch中不須要default也最好加上default語句
邏輯右移,左邊移入的位用0填充;算式右移,左邊移入的位由原先該值的符號位決定,符號位爲1則移入的位均爲1,符號位爲0則移入的位均爲0,這樣可以保持原數的正負形式不變。
ANSI C標準說明無符號值執行的全部移位操做都是邏輯移位,對於有符號值,邏輯移位仍是算數移位取決於編譯器。
要注意邏輯運算符的短路求值short-circuited evaluation特性