C语言宏定义  参考连接:
https://blog.csdn.net/u013910522/article/details/22672057https://www.cnblogs.com/bytebee/p/8205707.html宏定义的优点:1. 便于代码的移植和可读        例如:使用宏定义替一个在程序中经常使用的常量或变量类型,便于全局修改和使用;2. 提高程序运行效率函数调用会带来额外的开销,它需要开辟一片栈空间,记录返回地址,将形参压栈,从函数返回还要释放堆栈。宏定义的缺点:1. 无法对宏定义中的变量类型是否匹配进行检查宏定义变量,是Compile-Time时期的变量,系统在编译时候,就将其全部替换,而不会对其变量进行类型检查,相对不是很安全,可能存在潜在的问题,而没有发现.2. 未加括号带来的边界效应由于宏定义的时候,其各个分量未加括号,而在使用宏定义的时候,传递的参数是变量的表达式,然后经过系统展开后,由于优先级的原因,导致其结果不是用户所希望的。[例子] 传递参数是变量的表达式#define MUL(A,B) A*B而在使用的时候,这样的调用:int a=1,b=2,c=3,d=0;d=MUL(a+b,c)经过编译时候展开,就变成了d=a+b*c而不是我们所希望的d=(a+b)*c[解决办法]其解决办法也很简单,就是给每个分量,都加上括号,就可以避免此类问题即,在宏定义的时候,如此定义:#define MUL(A,B) ((A)*(B))[例子] 在define数据类型的时候, 未加括号带来的问题#define dPS struct s *   //注意末尾无分号当使用的时候,遇到:dPS p1,p2;的时候,经过编译时候替换扩展,就变成了struct s* p1,p2;而p2就不是我们所希望的s的指针类型了,而是一个普通的s数据结构类型的了.产生了边界效应.[解决办法]对应的解决办法也很简单,就是,遇到此类新数据类型定义的时候,还是用typedef将上述宏定义改为:typedef struct s * tPS; // 注意末尾有分号而后的使用:tPS p1,p2;就正常了.///
    函数宏定义用途1:简单函数可以用宏定义代替,以便于代码可读性与运行效率隐含的优点为:函数的参数必须被声明为一种特定的类型,所以它只能在类型合适的表达式上使用,我们如果要比较两个浮点型的大小,就不得不再写一个专门针对浮点型的比较函数。而宏定义则可以使用任何类型的变量。[例子] 求2个变量最大值的函数宏定义实现: #define MAX( a, b) ( (a) > (b) (a) : (b) )函数来实现:int max( int a, int b){return (a > b a : b)}用途2:传递带参数类型的宏解释:参数类型没法作为形参一部分传递给函数,但是可以把参数类型传递给带参的宏。[例子] 传递参数类型的函数宏定义#define MALLOC(n, type) \( (type *) malloc((n)* sizeof(type)))利用这个宏,就可以为任何类型变量分配一段我们指定的空间大小,并返回指向这段空间的指针。宏确切的工作过程:int *ptr;ptr = MALLOC ( 5, int );将这宏展开以后的结果:ptr = (int *) malloc ( (5) * sizeof(int) );这个例子是宏定义的经典应用之一,完成了函数不能完成的功能。

C 宏定义及函数宏定义相关推荐

  1. python怎么定义一个函数_Python定义一个函数的方法

    Python函数的定义 定义函数,也就是创建一个函数,可以理解为创建一个具有某些用途的工具.定义函数需要用 def 关键字实现,具体的语法格式如下: def 函数名(形参列表): //由零条到多条可执 ...

  2. 程序设计C语言函数定义,编程函数的定义之C语言

    编程函数的定义之C语言 类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型.接下来,小编为您介绍了编程函数的定义之C语言,感谢您的阅读! 无参函数的定义 无参函数定义的`一般形式如下:类 ...

  3. 用matlab定义位移函数,matlab 定义函数(Matlab怎么调用函数 自定义函数使用方法)...

    matlab 定义函数(Matlab怎么调用函数 自定义函数使用方法),哪吒游戏网给大家带来详细的matlab 定义函数(Matlab怎么调用函数 自定义函数使用方法)介绍,大家可以阅读一下,希望这篇 ...

  4. c语言宏定义(c语言宏定义是什么意思)

    C语言宏定义名可以有括号和分号吗? 宏定义的名称,是C语言标识符的一种,和函数名,变量名的命名规则是一样的,只允许使用数字,字母,下划线,且不能以数字开头. 所以宏名是不可以有括号和分号的. 另外,在 ...

  5. 【转自猫大】宏定义的黑魔法 - 宏菜鸟起飞手册

    宏定义在C系开发中可以说占有举足轻重的作用.底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行.而在更高层级进行开发时,我们会将更多的重心放在 ...

  6. python中怎么调用函数_浅谈Python中函数的定义及其调用方法

    一.函数的定义及其应用 所谓函数,就是把具有独立功能的代码块组织成为一个小模块,在需要的时候调用函数的使用包含两个步骤 1.定义函数–封装独立的功能 2.调用函数–享受封装的成果 函数的作用:在开发时 ...

  7. python函数定义及调用-浅谈Python中函数的定义及其调用方法

    一.函数的定义及其应用 所谓函数,就是把具有独立功能的代码块组织成为一个小模块,在需要的时候调用函数的使用包含两个步骤 1.定义函数�C封装独立的功能 2.调用函数�C享受封装的成果 函数的作用:在开 ...

  8. 函数的定义和形参/实参

    1,函数:我们定义好一个事情,等想用的时候直接拿出来就行了,代码不用每次都写,节省无用功,(就好比把一次性做好的红烧肉放到冰箱里,什么时候想吃,就拿出来吃就好了,不用再费时费力去做了) 函数的官方定义 ...

  9. js函数的定义及同名函数覆盖问题

    js函数的定义 用函数声明语法定义 用函数表达式定义 使用Function的构造函数 当分别用前两种方式定义同一个函数时 用函数声明语法定义 function add(num1,num2){var s ...

最新文章

  1. 数据中心的运维管理原则(一)
  2. ThreadPoolExecutor线程池的理解与应用
  3. Kettle使用_18 分组组件计算百分位数
  4. 海思Hi3516A(5)3D降噪
  5. 大型网站架构演化(二)——应用服务和数据服务分离
  6. 购房者一次性付清和还贷三十年,差别有多大?
  7. AI、大数据、中台、AIoT、Fintech等十余场火热专题应有尽有,年度盛会BDTC 2019邀您共赴!...
  8. Mybatis体系结构及工作流程
  9. 软件测试经典问题——NextDate函数
  10. mysql8 bigint类型和datetime类型的转换
  11. 莫兰迪颜色表以及RGB向16进制颜色的转换连接
  12. MATLAB符号运算——积分
  13. 【ML】机器学习(西瓜书)思维导图
  14. 电脑声控 电脑机器人功能
  15. 魔改一波合成大西瓜!代码已开源~
  16. CM安装成功,CM的web界面登录不上解决方案
  17. android 分享到微博客户端,Android APP集成新浪微博分享功能
  18. 【论文阅读 - YolTrack】YolTrack:基于MTL的自动车辆实时多目标跟踪和分割
  19. 问题七:vue+ts The left-hand side of an assignment expression may not be an optional property?
  20. 通过注册表隐藏任务栏

热门文章

  1. 活动回顾丨欧米区块链——数字资产服务商沙龙
  2. 计算机在交通规划中的应用,浅谈计算机在交通运输行业中的应用
  3. 一些非Windows系的语言,工具介绍
  4. 【已禁用】WeixinJSBridge:微信浏览器内置JavaScript 对象
  5. 使用公共 Registry - 每天5分钟玩转 Docker 容器技术(19)
  6. 严魏敏-习题-排序-08
  7. iOS 生成条纹图片
  8. 华为powered by android,华为手机鸿蒙 OS 2.0 开机界面终于去掉了 Powered by Android
  9. 统计学(三):置信区间; Z 检验(样本平均数的假设检验), 均值分布, 附Python实现(大牌护肤品碧欧泉背后的秘密)
  10. java数组遍历最快方式_java数组遍历的方法