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

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

    关注

    4976

    文章

    18246

    浏览量

    287932
  • C语言
    +关注

    关注

    180

    文章

    7522

    浏览量

    127479
收藏 人收藏

    评论

    相关推荐

    pcb插针的用法

    pcb插针的用法
    的头像 发表于 12-13 16:58 656次阅读

    define宏定义

    define宏定义 以#号开头的都是编译预处理指令,它们不是C语言的成分,但是C程序离不开它们,#define用来定义一个宏,程序在预处理阶段将用define定义的来内容进行了替换。因此在程序运行时
    的头像 发表于 11-24 15:35 415次阅读

    tcpdump常见的高级用法

    tcpdump 强大的功能和灵活的策略,主要体现在过滤器(BPF)强大的表达式组合能力。 本节主要分享一些常见的所谓高级用法,希望读者能够举一反三,根据自己实际需求,来灵活使用它。 1. 抓取指定
    的头像 发表于 09-28 15:47 359次阅读

    Stream模块的基础用法和进阶用法

    有用。在本教程中,我们将介绍 Stream 模块的基础用法和进阶用法,并提供示例。 基础用法 在本节中,我们将介绍 Stream 模块的基础用法,并提供基础示例。 从 Vec 中创建
    的头像 发表于 09-19 15:33 697次阅读

    SQLx的基础用法和进阶用法

    SQLx是一个Rust语言的异步SQL数据库访问库,支持多种数据库,包括PostgreSQL、MySQL、SQLite等。本教程将以SQLite为例,介绍SQLx的基础用法和进阶用法。 基础用法
    的头像 发表于 09-19 14:29 1218次阅读

    高级监控支持服务简介

    电子发烧友网站提供《高级监控支持服务简介.pdf》资料免费下载
    发表于 08-30 17:02 0次下载
    <b class='flag-5'>高级</b>监控支持服务<b class='flag-5'>简介</b>

    C语言中位运算符的高级用法(6)

    在上一篇文章中,我们介绍了~运算符的高级用法,本篇文章,我们将介绍
    发表于 08-22 10:51 164次阅读
    C语言中位运算符的<b class='flag-5'>高级</b><b class='flag-5'>用法</b>(6)

    C语言中位运算符的高级用法(5)

    在上一篇文章中,我们介绍了~运算符的高级用法,本篇文章,我们将介绍
    发表于 08-22 10:49 171次阅读
    C语言中位运算符的<b class='flag-5'>高级</b><b class='flag-5'>用法</b>(5)

    C语言中位运算符的高级用法(4)

    在上一篇文章中,我们介绍了^运算符的高级用法,本篇文章,我们将介绍~ 运算符的一些高级用法
    发表于 08-22 10:48 139次阅读
    C语言中位运算符的<b class='flag-5'>高级</b><b class='flag-5'>用法</b>(4)

    C语言中位运算符的高级用法(3)

    在上一篇文章中,我们介绍了|运算符的高级用法,本篇文章,我们将介绍^ 运算符的一些高级用法
    发表于 08-22 10:47 149次阅读
    C语言中位运算符的<b class='flag-5'>高级</b><b class='flag-5'>用法</b>(3)

    C语言中位运算符的高级用法(2)

    在上一篇文章中,我们介绍了&运算符的高级用法,本篇文章,我们将介绍| 运算符的一些高级用法
    发表于 08-22 10:45 182次阅读
    C语言中位运算符的<b class='flag-5'>高级</b><b class='flag-5'>用法</b>(2)

    C语言中位运算符的高级用法(1)

    在上一篇文章中,我们介绍了&运算符的基础用法,本篇文章,我们将介绍& 运算符的一些高级用法
    发表于 08-22 10:44 176次阅读
    C语言中位运算符的<b class='flag-5'>高级</b><b class='flag-5'>用法</b>(1)

    C语言中枚举的基本概念和常见用法

    在C语言中,枚举是一种方便组织和表示一组相关常量的工具。枚举类型有助于提高代码的可读性和可维护性。本文将介绍C语言枚举的基本概念、语法和用法,以及一些高级技巧。
    发表于 08-17 15:32 760次阅读

    BCM43740/BCM43720高级Wi-Fi 7接入芯片产品简介

    电子发烧友网站提供《BCM43740/BCM43720高级Wi-Fi 7接入芯片产品简介.pdf》资料免费下载
    发表于 07-26 16:43 1次下载
    BCM43740/BCM43720<b class='flag-5'>高级</b>Wi-Fi 7接入芯片产品<b class='flag-5'>简介</b>

    第34集(7.2#100))typedef 与 #define,你确定你了解它们的差异?

    define
    于振南的单片机世界
    发布于 :2023年06月01日 23:38:40