C專(zhuān)家編程讀書(shū)筆記(上)

字號(hào):

1、盡量不要在你的代碼中使用無(wú)符號(hào)類(lèi)型,以免增加不比要的復(fù)雜性。尤其是不要僅僅因?yàn)闊o(wú)符號(hào)書(shū)不存在負(fù)值(如年齡、國(guó)債)而用它來(lái)表示數(shù)量。盡量使用int那樣的有符號(hào)類(lèi)型,這樣在涉及升級(jí)混合類(lèi)型的復(fù)雜細(xì)節(jié)時(shí),不必?fù)?dān)心邊界情況(如-1被翻譯為非常大的正數(shù))。只有在使用位段和二進(jìn)制掩碼時(shí),才可以用無(wú)符號(hào)數(shù),應(yīng)該在表達(dá)式中使用強(qiáng)制類(lèi)型轉(zhuǎn)換,使操作數(shù)均為有符號(hào)或者無(wú)符號(hào)數(shù)。
    2、這也是為什么C++ 語(yǔ)言令人失望的原因:它對(duì)C語(yǔ)言中存在的一些最基本的問(wèn)題沒(méi)有什么改進(jìn),而它對(duì)C語(yǔ)言最重要的擴(kuò)展(類(lèi))卻是建立在脆弱的C類(lèi)型模型上。
    3、看一段代碼:
    int main(void)
    {
     int pa=0;
     char * avarsc[] =
     {
     "color monitor",
     "big disk",
     "Cray"
     "on-line drawing routhines",
     "mouse",
     "keyboard",
     "power cables",
     };
     char ** pp;
     pp = avarsc;
     printf("%s ", avarsc[2]); // output Crayon-line drawing routhines
     printf("%s ", *(pp++)); // output big disk
     scanf("%d", pa);
     return 1;
    }
    注意字符串?dāng)?shù)組的定義,最后那個(gè)逗號(hào),還有"Cray"后頭沒(méi)有逗號(hào)其實(shí)avarsc是個(gè)字符指針的指針
    曾經(jīng)寫(xiě)過(guò)一個(gè)這樣錯(cuò)誤的代碼,要為一個(gè)字符串: "" 申請(qǐng) 空間,應(yīng)該是STRLEN("""")卻寫(xiě)成了STRLEN(""""),編譯沒(méi)有錯(cuò)誤,也就沒(méi)有注意,在后來(lái)走查代碼的時(shí)候,發(fā)現(xiàn)了錯(cuò)誤的地方,多虧為它多申請(qǐng)了不少空間,不然這又是個(gè)難以察覺(jué)的內(nèi)存錯(cuò)誤。