如果需要pdf文檔,請私信我,我發(fā)給你,這本書今天讀完了,說一下感受,如果只是入門的話,讀完感受并不強烈,如果在工作了一段時間后,就會發(fā)現書中的錯誤確實是新手容易犯而且一些之前不理解的地方確實有了更新的認識,值得一讀。
為克山等地區(qū)用戶提供了全套網頁設計制作服務,及克山網站建設行業(yè)解決方案。主營業(yè)務為網站制作、網站設計、克山網站設計,以傳統(tǒng)方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!C語言進階因為編譯環(huán)境的不同,可移植性就成了一個重要話題,本節(jié)討論幾個最常見的錯誤來源。
1、 應對C語言標準變更新標準無法在舊編譯器中使用,為了增強可移植性,我們最好的做法在舊的環(huán)境和新的環(huán)境收益中做好選擇。
2、 標識符名稱的限制不要用大寫的函數名稱與庫函數同名,例如malloc和Malloc,假如你自己寫的是Malloc,但是編譯器如果不區(qū)分外部名稱大小寫,這里就會出錯,要避免這種情況。
3、 整數的大小非正式情況下short 與 int 是16位 long 是32位,這與機器的字符長度有關。
可移植性最好的辦法就是聲明該變量為long型,但在這種情況下我們去定義一個新的類型更加清晰:例如
typedef long tenmil;
4、 字符是有符號還是無符號整數將char型轉換為int型需要做出選擇;如果要轉換為有符號數,那么編譯器將char類型擴展為int 型時需要復制符號位,如果是轉換為無符號數,那么編譯器只需要在多余的位上直接填充0即可。如果最高位是1,那么將這數定義成為無符號字符
,無論什么編譯器,在該字符轉換為整型時都只需在多余的位填充0即可。
一個常見錯誤:如果c是一個字符變量,使用(unsigned)c 強制類型轉換成無符號整型,這里會出現錯誤。因為轉換為無符號時,會先轉換為int型,這里會得到非預期的結果。
正確的方法是(unsigned char)c;
在向右移位時,空出的位是由0填充還是由符號位的副本填充?
如果將操作的變量聲明為無符號類型,那么空出的位是由0填充,如果是有符號位,那么二者都可以。
移位計數(即移位操作的位數)允許的取值范圍是什么?
如果被移位的對象是n位,那么移位計數應該大于0且小于n,為什么要加這個限制,因為加上這個限制后,我們就能夠在硬件上高效地實現移位運算。
null指針并不指向任何對象,除非是用于賦值或比較運算,出于其他任何目的使用null指針都是非法的。
7、 除法運算時發(fā)生的截斷q=a/b
r=a%b
性質1:q*b+r==a;性質2:如果改變a的正負號,我們希望只改變q的符號,但不改變q的絕對值;性質3:當b>0時,我們希望r>=0且r這三條性質不可能同時在計算機中成立,所以在實現整數除法截斷運算時,會放棄三條原則中的至少一條,一般是第三條。
最好是避免a為負數這樣的情況,并且聲明a為無符號數
與機器的整數長度有關,如果是32位,那么大為2的31次方-1。
RAND_MAX為隨機數的大取值。
使用宏定義
#define _toupper? (?+’A’-’a’)
#define _tolower? (?+’a’-’A’)
malloc:申請分配一塊新內存
realloc:指向已分配的內存,重新定義大小,可能涉及到內存的拷貝
free :釋放內存
在代碼編寫中,如何減少程序錯誤,以下是一些通用的建議:
1、通用建議1、不要說服自己相信錯誤
2、直接了當地表明意圖
3、考察最簡單的特例
4、使用不對稱邊界
5、注意潛伏在暗處的bug
6、防御性編程:能想到可能發(fā)生的錯誤就一定會發(fā)生,所以應做出規(guī)避
C陷阱與缺陷(讀書筆記一)
C陷阱與缺陷(讀書筆記二)
C陷阱與缺陷(讀書筆記三)
C陷阱與缺陷(讀書筆記總)
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
網站名稱:C語言進階:C陷阱與缺陷(讀書筆記四)-創(chuàng)新互聯(lián)
瀏覽路徑:http://aaarwkj.com/article0/cojioo.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供域名注冊、定制開發(fā)、網站建設、用戶體驗、企業(yè)建站、網站收錄
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)