我們的計算器程序,用1234對應加減乘除,對於人閱讀很產生一點障礙。隔一個月後再看此代碼可能想不起是0123還是1234了,還得去代碼中查找,如果能為代表四則運算的四個數取個有意義的別名就好了,一看是知道對應什麼。沒問題,用宏啊。以下是我們的計算器程序第五版:
http://hovertree.com/menu/cpp/
//定義四則運算的宏
#define JIA 1
#define JIAN 2
#define CHENG 3
#define CHU 4
int main(void)
{
//保存用戶輸入的數
int number1;
int number2;
int opt;//運算符
//提示用戶輸入第一個數:
printf("請輸入第一個數:\n");
int r =scanf("%d",&number1);
//查看Scanf是否收到了正確的數
if(r==0){
printf("別調皮,這樣不好玩,我走了\n");
//程序退出
return 0;
}
// 何問起 hovertree.com
//提示用戶輸入第二個數
printf("請輸入第二個數:\n");
r = scanf("%d",&number2);
if(r==0){
printf("別調皮,這樣不好玩,我走了\n");
//程序退出
return 0;
}
//提示用戶輸入運算符
printf("請輸入運算符(%d%d%d%d分別對應加減乘除):\n",JIA,JIAN,CHENG,CHU);
r = scanf("%d",&opt);
if(r==0){
printf("運算符也是數字,別搞錯好嗎?你這樣讓我怎麼混? 我走了\n");
//程序退出
return 0;
}
//程序運行到這裡說明兩次輸入都正確
int result;//存放計算結果
//跟據運算符進行不同的運算
switch(opt){
case JIA:
//加
result = number1+number2;
break;
case JIAN:
//減
result = number1-number2;
break;
case CHENG:
//乘
result = number1*number2;
break;
case CHU:
//除,現在只能整除
result = number1/number2;
break;
default:
printf("運算符必須是1,2,3,4之一才行!走了\n");
return; //退出
}
//輸出結果
printf("%d+%d = %d\n",number1,number2,result);
return 0;
}
宏名習慣性全部大寫,定義宏不需要分號結束。宏的實質就是替換。在編譯時,第一步就是把代碼中的宏用實際的值代替。用宏還一個好處,當你把宏對值改動的話,程序其余地方不用動。比如你可以把1234,改成0123,程序照樣運行不出錯。
但是,除了宏之外,還可以使用枚舉。如是:
enum OPT{
jia = 1,
jian,
cheng,
chu
};
int main(void)
{
//保存用戶輸入的數
int number1;
int number2;
int opt;//運算符
//提示用戶輸入第一個數:
printf("請輸入第一個數:\n");
int r =scanf("%d",&number1);
//查看Scanf是否收到了正確的數
if(r==0){
printf("別調皮,這樣不好玩,我走了\n");
//程序退出
return 0;
}
//提示用戶輸入第二個數
printf("請輸入第二個數:\n");
r = scanf("%d",&number2);
if(r==0){
printf("別調皮,這樣不好玩,我走了\n");
//程序退出
return 0;
}
//提示用戶輸入運算符
printf("請輸入運算符(%d%d%d%d分別對應加減乘除):\n",jia,jian,cheng,chu);
r = scanf("%d",&opt);
if(r==0){
printf("運算符也是數字,別搞錯好嗎?你這樣讓我怎麼混? 我走了\n");
//程序退出
return 0;
}
// 何問起 hovertree.com
//程序運行到這裡說明兩次輸入都正確
int result;//存放計算結果
//跟據運算符進行不同的運算
switch(opt){
case jia:
//加
result = number1+number2;
break;
case jian:
//減
result = number1-number2;
break;
case cheng:
//乘
result = number1*number2;
break;
case chu:
//除,現在只能整除
result = number1/number2;
break;
default:
printf("運算符必須是1,2,3,4之一才行!走了\n");
return; //退出
}
//輸出結果
printf("%d+%d = %d\n",number1,number2,result);
return 0;
}
枚舉有名字,我們這個枚舉叫OPT。枚舉雖然看起來像結構,但是枚舉與結構完全不是一回事。枚舉的每一項就是為一個整數取了個名字,每一項都是一個常量,而不是的成員變量。枚舉的用處更像是把表示某種東西的相關值組織到一起,而宏就做不到了。比如四則運算的宏,每一項都可以隨意找位置放,它們不緊鄰也沒有語法錯誤。而枚舉是強制把相關的項放在一起。
枚舉的項的名字一般不大寫,當然你可以像宏一樣大寫。只要你整個工程中都能堅持統一的風格就行了。
http://www.cnblogs.com/roucheng/p/cpp11.html