《C陷阱與C缺陷》筆記

2021-09-25 19:33:29 字數 1580 閱讀 6311

if

(x==0)

}else

if

(x==0)

}

char

*r,*

malloc()

;r=malloc

(strlen

(s)+

strlen

(t)+1)

;if(!r)

strcpy

(r,s)

;strcat

(r,t);.

..free

(r);

# include

void

main()

}

setbuf

(stdout

, buf)

//所有寫入stdout的輸出都使用buf作為輸出緩衝區,直到buf緩衝區被填滿,或者程式設計師直接呼叫fflush, buf緩衝區中的內容才實際寫入到srdout中。緩衝區大小由系統檔案中的bufsiz定義。

//示例

#include

main()

}//該程式由於最後的緩衝內容隨著main函式結束而被釋放,會造成最後快取區的內容丟失。因此有如下兩種解決辦法

static

char buf[bufsiz]

;//宣告為靜態變數

//或者

char

*malloc()

;//使用動態分配緩衝區

setbuf

(stdout

,malloc

(bufsiz)

);

1.提高**的可讀性;

2. 優化系統開銷

3.可維護行好;

# define abs(a,b)  ((x)>0 ? (x):(-x)) 

//正解

//錯解一

# define abs(a,b)  ( x>0 ? x : -x)

abs(a-b)

//等價為

a-b>

0? a-b :

-a-b //因為-a-b相當於(-a)-b,因此上式會得到乙個錯誤的結果

//錯解二

# define abs(a,b)  (x)>0 ? (x):(-x)

abs(a)+1

//等價為

(x)>0?

(x):

(-x)+1

//相當於x 與 -x+1 作比較

# define mm int

mm* a,b;

//出錯,b並不是指標型別

typedef

int mm

mm* a,b;

7.2 整數的大小

7.3 字元為有符號還是無符號

7.4 移位運算子

7.5 記憶體位置0

7.6大小寫轉換

7.6 首先釋放,然後重新分配

C陷阱與缺陷 筆記

這本書很薄,看目錄感覺講的也很基礎,估計能較快看完。算是開始閱讀前陣子買的那波書的熱身吧。學過編譯原理,我們應當了解,編譯器的工作基本過程。在詞法分析中,不同編譯器的不同設定,會帶來不同的問題。雖然很是細微,但是如果出錯,可能編譯器不提示,讓人抓狂.int a 0195 int b 0215 int...

C陷阱與缺陷 筆記

fortan formula translator 公式翻譯程式語言 fibonacci 斐波那契 為什麼n 的含義是n 0,而不是n 0?a b的含義是?賦值操作符為什麼是 而不是 ascii碼 貪心原則?10是否能表示成010?單引號括起來的乙個字元表示乙個整數,雙引號括起來的乙個字元代表乙個指...

C陷阱與缺陷筆記

第一章 詞法陷阱 1.1 不同於 1.2 與 不同於 與 1.3 詞法分析中的 貪心法 1.4 整型變數 1.5 字元與字串 第二章 語法陷阱 2.1 理解函式宣告 2.2 運算子的優先順序問題 2.3 注意作為語句結束標誌的分號 2.4 switch語句 2.5 函式呼叫 2.6 懸掛 else引...