C語(yǔ)言day10-06帶參數(shù)的宏定義

pragma mark 帶參數(shù)的宏定義

pragma mark 概念

/**
 宏定義并不會(huì)做任何運(yùn)算, 無(wú)論是有參數(shù) 還是 沒(méi)有參數(shù)都僅僅是在翻譯成0和1之前做 一個(gè)簡(jiǎn)單的"替換"
 
 帶參數(shù)的宏定義注意點(diǎn)
 1.一般情況下 建議寫帶參數(shù)的宏,給每個(gè)參數(shù)加上一個(gè)()
 2.一般情況下建議寫帶參數(shù)的宏的時(shí)候, 結(jié)果也加上一個(gè)()  // 請(qǐng)記住

 */

pragma mark 代碼

#include <stdio.h>
int sum (int v1, int v2)
{
    return v1 + v2;
}

/*
 define 代表要定義一個(gè)宏
 SUM 宏的名稱
 (v1,v2) 參數(shù), 注意點(diǎn), 不需要寫數(shù)據(jù)類型
 v1 + v2 用于替換的內(nèi)容
 
 宏定義并不會(huì)做任何運(yùn)算, 無(wú)論是有參數(shù) 還是 沒(méi)有參數(shù)都僅僅是在翻譯成0和1之前做 一個(gè)簡(jiǎn)單的"替換"
 
 帶參數(shù)的宏定義注意點(diǎn)
 1.一般情況下 建議寫帶參數(shù)的宏,給每個(gè)參數(shù)加上一個(gè)()
 2.一般情況下建議寫帶參數(shù)的宏的時(shí)候, 結(jié)果也加上一個(gè)()
 
 */
#define SUM(v1,v2) v1+v2

// 要求定義一個(gè)帶參數(shù)的宏,用于計(jì)算兩個(gè)變量的乘積
//#define CF(v1,v2) v1*v2
#define CF(v1,v2) (v1)*(v2)

// 要求定義一個(gè)帶參數(shù)的宏,用于計(jì)算某個(gè)數(shù)的平方
//#define PF(v1) (v1)*(v1)
#define PF(v1) ((v1)*(v1))

int main()
{
    
    /*
    int a = 10;
    int b = 15;
//    int res = sum(a, b);
    
//    SUM(a,b) v1 == a v2 == b
//    a+b
//    int res = a+b;
    int res = SUM(a, b);
     //    printf("res = %i\n",res);
     */
#warning 什么時(shí)候使用宏定義 什么時(shí)候使用函數(shù)
    /*
     什么時(shí)候用帶參數(shù)的宏定義 什么時(shí)候用函數(shù)
     如果函數(shù)內(nèi)部的功能比較簡(jiǎn)單,僅僅是做一些簡(jiǎn)單的運(yùn)算 那么可以使用宏定義,使用宏定義效率更好,運(yùn)算速度更塊
     如果函數(shù)內(nèi)部的功能比較復(fù)雜, 不僅僅是一些簡(jiǎn)單的運(yùn)算,那么建議使用函數(shù)
    */
#warning 定義一個(gè)帶參數(shù)的宏,用于計(jì)算兩個(gè)變量的乘積
#warning 1.帶參數(shù)的宏 參數(shù)沒(méi)有加上()
    // CF(5 + 5,4+4)
    // 5 + 5 * 4 + 4    // 5 + 20 + 4 = 29
#warning 1.帶參數(shù)的宏 參數(shù)加上()
//   CF(5 + 5, 4 + 4)
//    (5 + 5) *(4 + 4) == (10)*(8)
//    int res = CF(5 + 5, 4+4);   // 10 * 8 = 80
    
    
#warning 2.帶參數(shù)的宏 結(jié)果沒(méi)有加上()
//    int res = PF(4);
//    PF(2 + 2)
//    (2 + 2) * (2 + 2)
//   16 / 16 * 16 == 1 * 16 == 想要的結(jié)果為 16
//    PF(v1)  / PF(v1)  * PF(v1)
//    PF(2 + 2)  / PF(2 + 2)  * PF(2 + 2)
//    (2 + 2) *(2 + 2)  / (2 + 2) *(2 + 2)   * (2 + 2) *(2 + 2)
//     4 * 4            /       4 * 4       * 4 * 4
//      16      / 4 * 4         * 4 * 4
//      16/4 == 4 * 4 == 16 * 4  = 64 * 4 = 256 結(jié)果卻為256
//    int res = PF(2 + 2) / PF(2 + 2) * PF(2 + 2);
    
    // 4 / 4 * 4  == 想要的結(jié)果 為 4
    //  PF(2)  / PF(2)  * PF(2)
    // (2 *2)   / (2) * (2) * (2)*(2)
    
#warning 2.帶參數(shù)的宏 結(jié)果加上()
//    PF(2)  / PF(2)  * PF(2)
//    ((v1)*(v1))     / ((v1)*(v1))    * ((v1)*(v1))
//     ((2)*(2))      / ((2)*(2))      * ((2)*(2))
//      4               /   4           * 4  == 4 結(jié)果=4 是想要的
    int res = PF(2) / PF(2 ) * PF(2 );
    printf("res = %i\n",res);
    return 0;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容