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])))

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

    关注

    5212

    文章

    20756

    浏览量

    338496
  • C语言
    +关注

    关注

    183

    文章

    7649

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CET消防设备电源监控系统简介

    电子发烧友网站提供《CET消防设备电源监控系统简介 .pdf》资料免费下载
    发表于 03-18 15:11 1次下载

    变频器的特殊用法

    变频器作为电力电子技术的重要应用设备,其核心功能是通过改变电源频率实现对电机转速的精确控制。然而在实际工业场景和创意应用中,工程师们早已突破传统认知,开发出一系列令人惊叹的特殊用法。这些创新实践不仅拓展了变频器的应用边界,更展现了电力电子技术的无限可能。
    的头像 发表于 03-03 17:08 658次阅读

    安达发|煤炭行业APS高级排产:开启高效生产新时代

    在煤炭行业,生产的高效与精准一直是企业追求的目标。而APS高级排产,正成为实现这一目标的关键利器。那么,APS高级排产究竟是什么?它又能为煤炭行业带来怎样的变革呢? APS高级排产,煤炭生产的智能
    的头像 发表于 01-15 14:34 307次阅读
    安达发|煤炭行业APS<b class='flag-5'>高级</b>排产:开启高效生产新时代

    嵌入式开发中一些少用的C语言用法分享

    ,比如我使用的是STM32F407,所以我从 core_cm4.h 文件中可以查阅到: #ifdefined ( __CC_ARM ) #define __ASM__asm/*!<
    发表于 01-05 08:19

    开源鸿蒙高级人才认证共建会议圆满举办

    2025年12月8日,由开放原子开源基金会、开源鸿蒙社区教育工作组共同举办的高级人才认证研讨会在北京举行。诚迈科技、软通动力、开鸿智谷、润开鸿、中科院软件所、中科鸿略、中软国际教育等7家共建单位参与
    的头像 发表于 12-31 10:32 920次阅读

    DLPC150数字控制器:用于高级光控的理想之选

    DLPC150数字控制器:用于高级光控的理想之选 在电子工程领域,对于能够实现高效、精确光控的设备需求日益增长。DLPC150作为一款用于高级光控的DLP®数字控制器,为我们带来了可靠且多功能
    的头像 发表于 12-15 10:55 2338次阅读

    #define预编译的指令

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

    普源DS4000E示波器高级触发功能使用指南

    普源DS4000E示波器作为电子测量领域的核心工具,其高级触发功能为用户提供了精准信号捕捉与分析的能力。本文将详细介绍该示波器的脉宽触发、单次触发及序列触发等高级功能的使用方法,帮助用户高效完成复杂
    的头像 发表于 12-01 16:11 566次阅读
    普源DS4000E示波器<b class='flag-5'>高级</b>触发功能使用指南

    小安派BW21-CBV-Kit入门教程之看门狗简介

    这是一个简单的看门狗定时器(WDT)示例,演示了看门狗 API 的用法。 有关看门狗的定义和工作原理,请参阅以下信息。
    的头像 发表于 11-13 17:22 5278次阅读
    小安派BW21-CBV-Kit入门教程之看门狗<b class='flag-5'>简介</b>

    C语言的printf基本用法介绍

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

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

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

    Jenkins Pipeline的高级应用技巧

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

    【原创】labview 通过“引用调用“ 的快捷用法,不需编程获取VI引用

    labview的“通过引用调用”函数在调用严格类型VI时,通常需要获取VI的引用。该函数的输入端也确实有引用接口,如图: 但是该函数还有一个快捷用法,右键单击 引用调用 函数,弹出菜单中有“调用设置
    发表于 07-30 17:53

    泰克示波器高级触发功能捕获异常信号的5种方法

    在电子工程领域,示波器是调试和分析信号的核心工具,而泰克示波器凭借其强大的高级触发功能,能够精准捕获异常信号,帮助工程师快速定位问题。本文将详细介绍五种利用泰克示波器高级触发功能捕获异常信号的方法
    的头像 发表于 05-29 09:38 1719次阅读
    泰克示波器<b class='flag-5'>高级</b>触发功能捕获异常信号的5种方法

    普源示波器高级触发功能案例分析

    一、引言 在电子测量领域,示波器的触发功能如同“信号捕手”,决定着波形捕获的精准度与效率。普源示波器(如DHO1204U、MSO5000系列等)不仅具备基础触发模式(边沿触发、脉冲触发等),更通过高级
    的头像 发表于 05-29 09:36 825次阅读