18.用宏定义实现 得到两个数的最值
生活随笔
收集整理的這篇文章主要介紹了
18.用宏定义实现 得到两个数的最值
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
使用兩種宏定義的方法實現(xiàn) 得到兩個數(shù)的最小值和最值
方法一: 利用三重條件運算符
#include <stdio.h> #define MIN(A,B) ( (A) > (B) ? (B) : (A) ) #define MAX(A,B) ( (A) > (B) ? (A) : (B) ) int main(void) {printf("%d\n",MIN(12,334));printf("%d\n",MAX(12,334));return 0; }值得關(guān)注的是:
?? 1 .? 宏定義的變量在引用的時候,用 ()括起來,防止預(yù)處理器展開的錯誤。
?? 2 . (a > b ??? action1 :? action2 ) 這樣的方式和 if —else 結(jié)果一樣,但他會使得編譯器產(chǎn)生更優(yōu)化的代碼,這在嵌入式編程中比較重要。
方法二: typeof 關(guān)鍵字
#include <stdio.h>#define MIX(X,Y) ({\typeof(X) x_ = (X);\typeof(Y) y_ = (Y);\(x_< y_)? x_:y_;\ }) #define MAX(X,Y) ({\typeof(X) x_ = (X);\typeof(Y) y_ = (Y);\(x_>y_)? x_:y_;\ })int main(int argc, char const *argv[]) {int num1,num2;printf("input two numbers:");scanf("%d %d",&num1,&num2);printf("mix is %d,max is %d\n",MIX(num1,num2),MAX(num1,num2));return 0; }值得借鑒的是:
?
? 1 . typeof? 關(guān)鍵字 用于獲得變量的數(shù)據(jù)類型 。
?
? 2 . 宏定義的實現(xiàn),用 { } 作為宏整體,里面是一個代碼塊,語句用 ; 隔開 。
?
? 3 . 當(dāng)宏的實現(xiàn)長度很長的時候,使用換行符??? \? 換到下一行 。
?
? 4 . 使用輸入數(shù)據(jù)的類型定義局部變量 x_ 和 y_ 實現(xiàn)對原始數(shù)據(jù)的保護。
?
? 5 . 宏實現(xiàn),不能用 ; 結(jié)尾
?
總結(jié)
以上是生活随笔為你收集整理的18.用宏定义实现 得到两个数的最值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 17.深浅拷贝和写时拷贝
- 下一篇: 20. A *p=NULL,p 可以调用