0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

#define的高级用法简介

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 作者:黄工的嵌入式技术 2020-02-05 11:50 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

来源:嵌入式大杂烩

地址:https://blog.csdn.net/xiaoxu2050/article/details/82893476

一、宏的定义与撤销

需要注意的是:

(1)宏定义应注意添加括号,这样语义会比较清晰。

(2)使用#undef可以撤销宏定义。

(3)引号中的宏定义不会被替换。

(4)宏定义的宏名必须是合法的标识符。

(5)宏定义中单、双引号必须成对出现。

二、带有参数的宏定义

需要注意的是:

(1)宏调用时参数的个数要与定义时相同。

三、跨行的宏定义,使用反斜杠 分隔

四、三个特殊符号:#,##,#@

五、常见的宏定义

1、防止头文件被重复包含

2、得到指定地址上的一个字节值或字值

3、得到一个field在结构体(struct)中的偏移量

#defineOFFSETOF(type,field)((size_t)&((type*)0)->field)

4、得到一个结构体中field所占用的字节数

#defineFSIZ(type,field)sizeof(((type*)0)->field)

5、得到一个变量的地址(word宽度)

#defineB_PTR(var)((byte*)(void*)&(var)) #defineW_PTR(var)((word*)(void*)&(var))

6、将一个字母转换为大写

#defineUPCASE(c)(((c)>='a'&&(c)<= 'z') ? ((c) - 0x20) : (c) )

7、判断字符是不是10进制的数字

#defineDECCHK(c)((c)>='0'&&(c)<= '9')

8、判断字符是不是16进制的数字

#defineHEXCHK(c)(((c)>='0'&&(c)<= '9') ||((c) >='A'&&(c)<= 'F') ||((c) >='a'&&(c)<= 'f'))

9、防止溢出的一个方法

#defineINC_SAT(val)(val=((val)+1>(val))?(val)+1:(val))

10、返回数组元素的个数

#defineARR_SIZE(a)(sizeof((a))/sizeof((a[0])))

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5186

    文章

    20149

    浏览量

    328851
  • C语言
    +关注

    关注

    183

    文章

    7642

    浏览量

    144616
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    #define预编译的指令

    #define预编译指令 顾名思义,这个指令的含义是“定义”,大家可以把该指令视为一种文本的替换。详细在下面代码展示 [list=1] [*]//使用该指令定义了一个数 [*]#define
    发表于 12-05 07:29

    C语言的printf基本用法介绍

    大家只需要掌握最基本的用法,以后随着编程知识的学习,我们会逐步介绍更加高级用法,最终让大家完全掌握 printf。
    发表于 11-12 07:04

    中科慧眼高级智能辅助驾驶系统再获双定点

    近日,中科慧眼高级智能辅助驾驶系统接连斩获两个商用车主机厂量产定点,充分彰显中科慧眼在商用车高级智能辅助驾驶领域的领先地位。
    的头像 发表于 09-05 17:57 787次阅读

    Jenkins Pipeline的高级应用技巧

    为一名在运维一线摸爬滚打5年的工程师,我见过太多因为CI/CD流水线配置不当而导致的生产事故。今天分享一些Jenkins Pipeline的高级应用技巧,这些都是我在实际项目中踩过坑后总结的经验,希望能帮助大家少走弯路。
    的头像 发表于 08-27 14:32 441次阅读

    UIAbility组件基本用法说明

    UIAbility组件基本用法 UIAbility组件的基本用法包括:指定UIAbility的启动页面以及获取UIAbility的上下文UIAbilityContext。 指定UIAbility
    发表于 05-16 06:32

    harmony OS NEXT-Navagation基本用法

    # Navagation基本用法 > Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏,内容栏和公工具栏,其中内容区默认首页显示导航内容
    的头像 发表于 04-27 17:39 713次阅读

    Linux中文本处理命令的用法

    Linux 三剑客是(grep,sed,awk)三者的简称,熟练使用这三个工具可以提升运维效率。Linux 三剑客以正则表达式作为基础,而在Linux系统中,支持两种正则表达式,分别为“标准正则表达式”和“扩展正则表达式”。在掌握好正则表达式后,将具体讲解三剑客的用法
    的头像 发表于 04-15 10:22 556次阅读
    Linux中文本处理命令的<b class='flag-5'>用法</b>

    高级的阻抗计算和应用

    一般的阻抗计算公式适用于简单的电路结构,但在复杂的电路中以及频率响应非常重要的情况下,就需要更高级的阻抗计算了。这包括使用数值分析和方针工具。
    的头像 发表于 02-12 13:45 1012次阅读
    <b class='flag-5'>高级</b>的阻抗计算和应用

    WEBENCH电源高级分析

    电子发烧友网站提供《WEBENCH电源高级分析.pdf》资料免费下载
    发表于 01-21 14:53 0次下载
    WEBENCH电源<b class='flag-5'>高级</b>分析

    ES32V SDK简介

    电子发烧友网站提供《ES32V SDK简介.pdf》资料免费下载
    发表于 01-16 16:15 0次下载
    ES32V SDK<b class='flag-5'>简介</b>

    EE-235:VisualDSP脚本简介

    电子发烧友网站提供《EE-235:VisualDSP脚本简介.pdf》资料免费下载
    发表于 01-06 14:22 0次下载
    EE-235:VisualDSP脚本<b class='flag-5'>简介</b>

    屏蔽栅MOSFET技术简介

    继上一篇超级结MOSFET技术简介后,我们这次介绍下屏蔽栅MOSFET。
    的头像 发表于 12-27 14:52 4924次阅读
    屏蔽栅MOSFET技术<b class='flag-5'>简介</b>

    ADS1258 VREFN接了地,想问这样用法可以吗?

    现在是这样使用ADS1258电压参考的,VREFP接2.5V电压,VREFN接地,因为采集信号都是正压的,所以VREFN接了地,想问这样用法可以吗?会不会影响ADS1258正常工作?
    发表于 12-27 06:06

    keil在Debug的高级用法

    第一节软件说明Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。目前软件对中文的支持不友好,不建议安装网上的一些汉化包之类的。另外建立的工程文件路径也尽量不要存在中文,否则可能会出现一些异常。第二节基本调试方法1,基本调试操作:首先点击"Debug->
    的头像 发表于 12-26 21:01 2701次阅读
    keil在Debug的<b class='flag-5'>高级</b><b class='flag-5'>用法</b>

    DAC7562的CLR引脚怎么用法?可以悬空吗?

    DAC7562的CLR引脚怎么用法?可以悬空吗?能不能详细解释一下?谢谢
    发表于 12-17 08:16