美文网首页
宏定义的使用

宏定义的使用

作者: 晓茫 | 来源:发表于2020-06-06 22:59 被阅读0次

本文仅记录下看源码过程中遇到的C宏的一些说明

  1. 运算符优先级问题
#define mutil(x,y) x*y
示例:
1. mutil(2,3) 展开为 2*3
2. mutil(1+2,3) 展开为  1+2*3 ,优先级有问题

正确方式: #define  mutil(x,y) (x)*(y) //确保优先级 
  1. 分号吞噬问题
#define foo(x) bar(x); baz(x)

这种方式的问题是,因为有展开上上下文问题

foo(1) //展开 为 bar(1);baz(1) 正确
if(show) foo(1) // 展开为 if(show) bar1(1);baz(1) 丢失了baz的执行 

#define foo(x) { bar(x); baz(x)} 这样能否解决问题?
反例:
if (!feral)  
    foo(wolf);  
else  
    bin(wolf);

展开后:

if (!feral) {  
    bar(wolf);  
    baz(wolf);  
};  //语法问题哦
else  
    bin(wolf);  

//为了不收调用上下文的分号和{}之类的影响
正确的定义
#define foo(x)  do{ bar(x); baz(x); }while(0)
不管如何被展开都不会问题
  1. 宏参数重复调用
#define min(X, Y)  ((X) < (Y) ? (X) : (Y))
min(getA(1),getB(2))  //展开后 为 getA(1)<getB(2)?getA(1):getB(2) 有的时候很难确定 getA(1)两次调用返回的值是一致的

相关文章

  • 准备:回顾c

    宏定义 关键字 define 定义一个常量的方法(即宏定义) 带参数的宏定义 宏函数的定义 使用宏函数的好处是,不...

  • iOS宏定义介绍

    宏定义 在了解宏定义的使用前,需要说明一下合理使用宏定义确实可以提高程序的可读性,但是滥用宏定义,也会带来一些害处...

  • C语言中的预处理器(二)

    预定义宏 ANSI C 定义了许多宏。在编程中您可以使用这些宏,但是不能直接修改这些预定义的宏。简而言之,预定义宏...

  • iOS UIColor 16进制转换

    宏定义如下: 使用:

  • 宏定义的使用

    最近看到代码里面有些 宏 蛮有意思的。学习顺便记录一下 。 定义 宏 是一种批量处理的称谓。计算机科学里的宏是一种...

  • 宏定义的使用

    本文仅记录下看源码过程中遇到的C宏的一些说明 运算符优先级问题 分号吞噬问题 这种方式的问题是,因为有展开上上下文...

  • iOS 一些常用的宏定义

    规范 宏定义 系统中自带的宏 系统中宏使用零碎

  • iOS pch中定义使用宏定义函数和代码块

    一、objective-C项目pch文件中定义函数和代码块 使用宏定义函数实现 使用宏定义代码块实现 二、swif...

  • Swift-OC混编总结

    一、swift怎么用oc定义的宏?1、在swift中,能直接使用定义为常量的宏,不能使用带有方法调用的宏,也不能使...

  • 懒加载

    宏式懒加载 定义一个懒加载的宏 使用

网友评论

      本文标题:宏定义的使用

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