《C陷阱與缺陷》讀書筆記

詞法分析中的“貪心法”
  • 每個符號應(yīng)該包含盡可能多的字符轴咱。
    a---b等同于(a--)-b
    a+++++b被編譯器視為((a++)++)+b烈涮,語法上是不正確的朴肺。
字符與字符串
  • 單引號引起的字符代表一個整數(shù)。

  • 雙引號引起的字符串代表一個指向無名數(shù)組起始字符的指針坚洽。

理解函數(shù)聲明
(* (void (*) () ) 0) ();

這是一個經(jīng)典的例子戈稿。分析如下:

  1. void (*) () 指向返回值為void類型的函數(shù)指針

  2. ( void (*) () ) 0 將0進行類型轉(zhuǎn)換

  3. (* ( void (*) () ) 0) (); 調(diào)用地址為0的子例程

運算符優(yōu)先級
  • 優(yōu)先級由高到低排列
  • 數(shù)組下標(biāo)** [ ]、函數(shù)調(diào)用操作符( )讶舰、各結(jié)構(gòu)成員選擇操作符 ->**和 **. **鞍盗。自左與右結(jié)合。
  • 單目運算操作符跳昼,包括類型轉(zhuǎn)換般甲。 自右至左結(jié)合。
  • 雙目運算操作符鹅颊,其中優(yōu)先級順序 算術(shù)運算符>位移運算符>關(guān)系運算符>邏輯運算符欣除。 自左向右結(jié)合
  • 三目運算符(條件運算符)。 自右至左結(jié)合挪略。
  • 賦值運算符历帚。 自右至左結(jié)合滔岳。
  • 逗號運算符。 自左與右結(jié)合挽牢。

運算符優(yōu)先級所引發(fā)的錯誤很難發(fā)現(xiàn)谱煤。

 while ( c == '\t '|| c = ' '|| c == '\n' )

事實上,該語句的正確劃分如下禽拔。

while ( (c == '\t '|| c ) = ( ' '|| c == '\n' ))

該語句不僅是將==誤寫為=刘离,還導(dǎo)致了表達式左端為不可修改的左值。

switch函數(shù)的優(yōu)勢與劣勢
  • 程序在switch中順序執(zhí)行睹栖,不受case標(biāo)號影響硫惕。
switch (color) {
    case 1:printf("red");
    case 2:printf("yellow");
    case 3:printf("blue");
}

color=2執(zhí)行結(jié)果為 yellowblue

使用不對稱邊界
  • 用第一個入節(jié)點和第一個出界點來表示一個數(shù)值的范圍
    一個字符串中由下標(biāo)為16到下標(biāo)為37的字符元素所組成的字串,它的長度是多少呢野来?
    若將其表示為整數(shù)x滿足x** >= 16(入界點)且x < **38(出界點)恼除,則很容易計算其結(jié)果。

該技巧可以用在for循環(huán)中曼氛,用來循環(huán)結(jié)束的標(biāo)志豁辉。

使用頭文件
  • 每個外部對象只在一個頭文件中聲明,需要用到該外部對象的所有模塊都包含這個頭文件(包括其定義該外部對象的模塊)
返回整數(shù)的getchar函數(shù)
  • 單引號引起的字符代表一個整數(shù)舀患。
  • 若使用char接收徽级,可能無法容下EOF
宏可能產(chǎn)生的問題
  1. 宏定義中的空格
#define f (x) ((x)-1)

該宏定義為f代表(x) ((x)-1)

  1. 宏不是函數(shù)
#define abs(x) x>0?x:-x
abs(a-b)

展開后為

a-b>0?a-b:-a-b //并不是我們期望的-(a-b)

因此聊浅,宏定義中應(yīng)該把每個參數(shù)都用括號括起來餐抢,整個表達式也應(yīng)該用括號括起來。

  1. 存在副作用
#define max(a,b) ( (a) > (b) ? (a) : (b) )
biggest = max ( biggest , x[i++])

展開后

biggest = ( (biggest)>(x[i++]) ? (biggest) : (x[i++])

i一次可能遞增2低匙。

  1. 宏不是類型定義
#define T1 struct foo *
T1 a,b

展開為

struct foo * a , b 

兩者類型不同旷痕。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市努咐,隨后出現(xiàn)的幾起案子苦蒿,更是在濱河造成了極大的恐慌,老刑警劉巖渗稍,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件佩迟,死亡現(xiàn)場離奇詭異,居然都是意外死亡竿屹,警方通過查閱死者的電腦和手機报强,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拱燃,“玉大人秉溉,你說我怎么就攤上這事。” “怎么了召嘶?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵父晶,是天一觀的道長。 經(jīng)常有香客問我弄跌,道長甲喝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任铛只,我火速辦了婚禮埠胖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘淳玩。我一直安慰自己直撤,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布蜕着。 她就那樣靜靜地躺著谋竖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪侮东。 梳的紋絲不亂的頭發(fā)上圈盔,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天豹芯,我揣著相機與錄音悄雅,去河邊找鬼。 笑死铁蹈,一個胖子當(dāng)著我的面吹牛宽闲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播握牧,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼容诬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了沿腰?” 一聲冷哼從身側(cè)響起览徒,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颂龙,沒想到半個月后习蓬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡措嵌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年躲叼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片企巢。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡枫慷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情或听,我是刑警寧澤探孝,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站誉裆,受9級特大地震影響再姑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜找御,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一元镀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧霎桅,春花似錦栖疑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至揭糕,卻和暖如春萝快,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背著角。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工揪漩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吏口。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓奄容,卻偏偏與公主長得像,于是被迫代替她去往敵國和親产徊。 傳聞我的和親對象是個殘疾皇子昂勒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 多字符記號 輸入流到給定字符串,識別成記號后舟铜,會盡可能包含之后字符構(gòu)成最長字符串作為記號 組合賦值運算符是兩個記號...
    Nemocdz閱讀 416評論 1 2
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,513評論 1 51
  • ?1 C語言程序的結(jié)構(gòu)認識 用一個簡單的c程序例子戈盈,介紹c語言的基本構(gòu)成、格式谆刨、以及良好的書寫風(fēng)格塘娶,使讀者對c語...
    CONLYOUC閱讀 8,699評論 9 66
  • 2017年8月27日 易經(jīng)六十一至六十四卦、黃帝內(nèi)經(jīng)第十六痴荐、詩經(jīng)鄭風(fēng)二 137累積學(xué)習(xí)297天 今日養(yǎng)生:雜糧粥血柳,...
    雅筑小易閱讀 292評論 0 0
  • 他以卑微的使命降臨世間,卻將要也偉大的信仰走過一生生兆!我以光宗耀祖的使命來到世間难捌,卻怕也卑微的命運度過一生膝宁!
    赫拉拉閱讀 177評論 1 0