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