• C语言 define 定义函数


    目录

    零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

    一.define 简介

    C 语言中,除了可以用 #define 定义一个标识符来表示一个常量,还可以用 #define 定义函数,例如:

    //定义常量
    #define MAX_VALUE 100       //定义整型变量MAX_VALUE值为100
    #define USER_NAME "huge"    //定义字符串变量USER_NAME值为"huge"
    #define PI 3.1415926        //定义浮点数变量PI值为3.1415926
    
    //定义函数
    #define MAX(a,b) (a>b)?a:b  //取两个数最大值
    #define MIN(a,b) (a<b)?a:b  //取两个数最小值
    

    凡是以 # 开头的均为预处理指令,预处理又叫预编译。预编译不是编译,而是编译前的处理。这个操作是在正式编译之前由系统自动完成的。

    二.define 定义函数

    1.define 定义不带参数的函数

    /******************************************************************************************/
    //@Author:猿说编程
    //@Blog(个人博客地址): www.codersrc.com
    //@File:C语言教程 - C语言 define定义函数
    //@Time:2021/06/27 08:00
    //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    /******************************************************************************************/
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string>
    
    #define RESULT  (x*2+5)
    
    int main()
    {
        int x = 10;
        printf("RESULT是:%d
    ",RESULT);
       return 0;
    }
    /*
    RESULT是:25
    */
    

    2.define 定义带参数的函数

    /******************************************************************************************/
    //@Author:猿说编程
    //@Blog(个人博客地址): www.codersrc.com
    //@File:C语言教程 - C语言 define定义函数
    //@Time:2021/06/27 08:00
    //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    /******************************************************************************************/
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string>
    
    #define MAX(a,b) (a>b)?a:b  //取两个数最大值
    #define MIN(a,b) (a<b)?a:b  //取两个数最小值
    
    int main()
    {
        printf("最大值是:%d
    ",MAX(5,100));
        printf("最小值是:%d
    ",MIN(5,100));
       return 0;
    }
    /*
    最大值是:100
    最小值是:5
    */
    

    三.define 定义函数陷阱

    1.define 函数陷阱一

    /******************************************************************************************/
    //@Author:猿说编程
    //@Blog(个人博客地址): www.codersrc.com
    //@File:C语言教程 - C语言 define定义函数
    //@Time:2021/06/27 08:00
    //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    /******************************************************************************************/
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string>
    
    #define RESULT(x)  x*x
    
    int main()
    {
        printf("RESULT是:%d
    ",RESULT(2));
        printf("RESULT是:%d
    ",RESULT(2+1));
       return 0;
    }
    /*
    RESULT是:4
    RESULT是:5
    */
    

    很蒙蔽??为什么第二个计算结果不是9,而是5??

    #define RESULT(x)  x*x
    RESULT(2) 等价 2*2 = 4
    RESULT(2+1) 等价 2+1*2+1 = 5
    

    2.define 函数陷阱一解决办法

    /******************************************************************************************/
    //@Author:猿说编程
    //@Blog(个人博客地址): www.codersrc.com
    //@File:C语言教程 - C语言 define定义函数
    //@Time:2021/06/27 08:00
    //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    /******************************************************************************************/
    #include <stdio.h>
    #include <stdlib.h>
    #include <string>
    
    #define RESULT(x)  (x)*(x)  //在参数两侧加括号
    
    int main()
    {
        printf("RESULT是:%d
    ",RESULT(2));
        printf("RESULT是:%d
    ",RESULT(2+1)); //等价 (2+1)*(2+1) = 9
       return 0;
    }
    /*
    RESULT是:4
    RESULT是:9
    */
    

    3.define 函数陷阱二

    /******************************************************************************************/
    //@Author:猿说编程
    //@Blog(个人博客地址): www.codersrc.com
    //@File:C语言教程 - C语言 define定义函数
    //@Time:2021/06/27 08:00
    //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    /******************************************************************************************/
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string>
    #define RESULT(x)  (x)*(x)
    int main()
    {
        printf("RESULT是:%d
    ",RESULT(2));
        printf("RESULT是:%d
    ",9/RESULT(2+1));
       return 0;
    }
    /*
    RESULT是:4
    RESULT是:9
    */
    

    很蒙蔽??为什么第二个计算结果不是1,而是9??

    #define RESULT(x)  x*x
    RESULT(2) 等价 2*2 = 4
    9/RESULT(2+1) 等价 9/(2+1)*(2+1) = 5
    

    4.define 函数陷阱二解决办法

    /******************************************************************************************/
    //@Author:猿说编程
    //@Blog(个人博客地址): www.codersrc.com
    //@File:C语言教程 - C语言 define定义函数
    //@Time:2021/06/27 08:00
    //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    /******************************************************************************************/
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string>
    #define RESULT(x)  ((x)*(x)) //在参数两侧加括号,整个表达式也需要加上括号
    
    int main()
    {
        printf("RESULT是:%d
    ",RESULT(2));
        printf("RESULT是:%d
    ",9/RESULT(2+1));
       return 0;
    }
    /*
    RESULT是:4
    RESULT是:1
    */
    

    以上讨论说明,对于宏定义,保险的做法是不仅应在参数两侧加括号,也应在整个字符串外加括号。

    四.猜你喜欢

    1. C 语言 数组下标越界和内存溢出区别
    2. C 语言 指针声明和定义
    3. C 语言 指针 p++ / p–
    4. C 语言 p++/§++/_(p++)/_p++
    5. C 语言 使用指针遍历数组
    6. C 语言 指针和数组区别
    7. C 语言 指针数组和数组指针区别
    8. C 语言 空指针 NULL
    9. C 语言 void 指针
    10. C 语言 野指针
    11. C 语言 函数值传递和址传递
    12. C 语言 函数缺省参数
    13. C 语言 函数不定长参数
    14. C 语言 函数指针
    15. C 语言 指针函数
    16. C 语言 回调函数 callback
    17. C 语言 typedef
    18. C 语言 define 定义常量
    19. C 语言 define 防止头文件重复包含
    20. C 语言 define 定义函数

    未经允许不得转载:猿说编程 » C 语言 define 定义函数

    本文由博客 - 猿说编程 猿说编程 发布!

  • 相关阅读:
    100以内质数的算法
    WebAPI和WebService的区别
    .net core 2.0 数据访问-迁移
    .net core 2.0 Redis的基本使用
    .net core 2.0 Autofac
    net core 2.0 + Autofac的坑
    MVC路由机制
    MVC原理
    CentOS安装GIt、上传项目到git仓库
    ARM 汇编指令集 特点5:ARM 多级指令流水线
  • 原文地址:https://www.cnblogs.com/shuopython/p/15228590.html
Copyright © 2020-2023  润新知