轉(zhuǎn)帖|其它|編輯:郝浩|2010-07-19 10:31:56.000|閱讀 581 次
概述:以前用C++時(shí),喜歡去玩一些語(yǔ)法上的技巧,每學(xué)到一個(gè)技巧都高興得不得了,總是想找個(gè)地方用它,以顯示自己的水平。其實(shí)我們應(yīng)該更關(guān)心技巧的實(shí)用價(jià)值,如果一項(xiàng)技巧很巧妙,但很少用它,忘掉了也不必覺(jué)得可惜。最近發(fā)現(xiàn)兩則C語(yǔ)言技巧,以前沒(méi)有用過(guò),覺(jué)得有些實(shí)用價(jià)值,做個(gè)筆記吧。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
以前用C++時(shí),喜歡去玩一些語(yǔ)法上的技巧,每學(xué)到一個(gè)技巧都高興得不得了,總是想找個(gè)地方用它,以顯示自己的水平。其實(shí)我們應(yīng)該更關(guān)心技巧的實(shí)用價(jià)值,如果一項(xiàng)技巧很巧妙,但很少用它,忘掉了也不必覺(jué)得可惜。最近發(fā)現(xiàn)兩則C語(yǔ)言技巧,以前沒(méi)有用過(guò),覺(jué)得有些實(shí)用價(jià)值,做個(gè)筆記吧。
1.1. 數(shù)組初始化
常見(jiàn)的數(shù)組初始化方法:
int array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; |
通常情況下,這種做法沒(méi)有問(wèn)題。再看看下面這個(gè)例子:
enum { FRUIT_APPLE, FRUIT_PEAR, FRUIT_BANANA, FRUIT_NR };
int price[FRUIT_NR] = {20, 25, 30}; |
這段代碼有個(gè)潛在前提,那就是枚舉的順序不能變化。一旦變化,整個(gè)邏輯都亂了,這樣的BUG能否查出來(lái)要靠運(yùn)氣。這樣的假設(shè)是靠不住的,特別是當(dāng)枚舉是第三方庫(kù)提供的時(shí)候,他們調(diào)整枚舉的順序后絕對(duì)不會(huì)通知你。為了避免這樣的潛在隱患,可以用下面的方法:
Enum { FRUIT_APPLE, FRUIT_PEAR, FRUIT_BANANA, FRUIT_NR };
int price[FRUIT_NR] = { [FRUIT_APPLE] = 20, [FRUIT_PEAR] = 25, [FRUIT_BANANA] = 30}; |
1.2. 處理case語(yǔ)句
處理case語(yǔ)句,有很多case情況要做相同的處理時(shí),通常的做法是:
switch(value) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: { printf("ok\n"); break; } default:break; } |
這樣寫(xiě)當(dāng)然沒(méi)有錯(cuò),只是比較繁瑣,特別是這樣情況很多時(shí)。如果這些值是連續(xù)的,我們可以用下面的方法:
switch(value) { case 0 ... 9: { printf("ok\n"); break; } default:break; }
|
這兩個(gè)技巧好像是屬于C語(yǔ)言新標(biāo)準(zhǔn)的,我只是在gcc上測(cè)試過(guò),不能保證可移植性。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:csdn博客