美文网首页十天学会C语言
第10天C语言(06):带参数的宏定义

第10天C语言(06):带参数的宏定义

作者: liyuhong | 来源:发表于2017-07-14 09:45 被阅读13次
    二、代码
    #include <stdio.h>
    
    int sum(int v1,int v2)
    {
        return v1 + v2;
    }
    
    /*
     #define SUM(v1,v2) v1+v2
         #define 代表要定义宏
         SUM 宏的名称
         (v1,v2) 参数, 注意点, 不需要写数据类型
         v1+v2 用于替换的内容
         
         宏定义 并不会做任何运算, 无论是有参数 还是没有参数 都仅仅是在翻译 0 和 1之前做一个简单的"替换"
         SUM(v1,v2) 宏
         v1+v2 值
     
         什么时候 用带参数的宏定义 什么时候 用函数
         如果函数内部的功能比较简单, 仅仅做一些简单的运算 那么可以使用宏定义, 使用宏定义效率更好,运算速度更快,
         如果函数内部的功能比较复杂, 不仅仅是一些简单的运算, 那么建议使用函数
     
     带参数的宏定义注意点
        1.一般情况下 建议写带参数的宏的时候,给每个参数加上()
        2.一般情况下 建议写带参数的宏的时候, 给结果也加上一个()
     */
    #define SUM(v1,v2) v1+v2
    
    // 要求定义一个带参数的宏,用于计算两个变量的乘积
    #define CF(v1,v2) (v1)*(v2)
    
    
    // 要求定义一个带参数的宏,用于计算某个数的平方
    //#define PF(v1) (v1)*(v1)
    #define PF(v1) ((v1)*(v1))
    
    int main()
    {
        /*
        // 要求 不使用函数,实现计算两个变量的和
        int a = 10;
        int b = 5;
    //    int res = sum(a,b);
        
    //  SUM(a,b) v1==a v2==b
    //   a + b
        int res = SUM(a, b);
         */
        
        /*
         什么时候 用带参数的宏定义 什么时候 用函数
         如果函数内部的功能比较简单, 仅仅做一些简单的运算 那么可以使用宏定义, 使用宏定义效率更好,运算速度更快,
         如果函数内部的功能比较复杂, 不仅仅是一些简单的运算, 那么建议使用函数
         */
    //    printf("res = %i\n",res);
        
    //    int res = CF(10,10);
        // CF(5+5,4+4)
        // 5 + 5*4 + 4 = 29
    //    int res = CF(5 + 5,4 + 4); // 10 + 8 = 80
    //    int res = PF(2+2);
        
        //          16 / 16 *16 = 16
        //      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
        //          4 * 4 * 4 * 4 = 16 * 4 * 4 = 256
        
        
        //          PF(2) / PF(2) * PF(2)
        //      ((2)*(2)) / ((2)*(2)) * ((2)*(2))
        //          4   / 4 * 4 = 4
        int res = PF(2) / PF(2) * PF(2);
        
        printf("res = %i\n",res);
        return 0;
    }
    

    相关文章

      网友评论

        本文标题:第10天C语言(06):带参数的宏定义

        本文链接:https://www.haomeiwen.com/subject/dyrnhxtx.html