zoukankan      html  css  js  c++  java
  • 带参数宏定义和函数的区别

    字体变小 字体变大

    #define S(a,b) a*b
    area=S(3,2)

    int S(int a,int b)
    { int s;
      s=a*b;
      return(s);
    }
    这两个有什么区别

    #define S(a,b) a*b
    area=S(3,2)

    尽量少使用宏定义。宏定义是把S(a,b)简单地替换成a*b

    这样会产生问题,最典型的两种:

    1.缺括号,比如aera=S(x+y,x-y),会被替换成x+y*x-y

    2.自增运算符

    定义宏

    #define S(a) (a)*(a)

    结果S(a++),变成(a++)*(a++)这个大家都知道,在不同编译环境下会有不同结果。

    也就是说,宏只是编译前简单替换代码内容,而函数真正产生代码。

    宏是编译期的,函数是运行期的;

    宏不是实体,而函数是一个可寻址的实体;

    宏只是编译期替换,在程序里每遇到S(a,b),就用a*b代替,a和b两个实体并没有由宏实际产生,而函数S会在栈中定义两个对象a和b。

    宏没有生存期、作用域之类的概念,而函数就有。

    函数在运行过程中会在栈中产生函数调用过程活动记录,而宏则没有。

  • 相关阅读:
    常用词汇短语
    Java中的数据结构
    Java中的设计模式
    .NET中的编译、程序调用
    常用口语
    0. Angular框架原理
    茶叶
    NPOI自定义单元格背景颜色
    ASP.NET MVC添加Action就找不到
    navicat for mysql 导入SQL Server显示中文乱码解决办法
  • 原文地址:https://www.cnblogs.com/wqj1212/p/1297609.html
Copyright © 2011-2022 走看看