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

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

3天内不再提示

C语言中的宏定义

嵌入式应用开发 来源:嵌入式应用开发 作者:嵌入式应用开发 2022-09-28 16:05 次阅读

#define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。命令有两种格式:一种是简单的宏定义,另一种是带参数的宏定义。

1.不带参数的宏定义:
宏定义又称为宏代换、宏替换,简称“宏”。
格式:
#define 标识符 字符串
其中的标识符就是所谓的符号常量,也称为“宏名”。
预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。
掌握"宏"概念的关键是“换”。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。
即在对相关命令或语句的含义和功能作具体分析之前就要换:
例:
#define PI 3.1415926
把程序中出现的PI全部换成3.1415926
说明:
(1)宏名一般用大写
(2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义
(3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。
(4)宏定义末尾不加分号;
(5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。
(6)可以用#undef命令终止宏定义的作用域
(7)宏定义可以嵌套
(8)字符串" "中永远不包含宏
(9)宏定义不分配内存,变量定义分配内存。
2.带参数的宏:
除了一般的字符串替换,还要做参数代换
格式:
#define 宏名(参数表) 字符串
例如:#define S(a,b) a*b
area=S(3,2);第一步被换为area=a*b; ,第二步被换为area=3*2;
类似于函数调用,有一个哑实结合的过程:
(1)实参如果是表达式容易出问题
#define S(r) r*r
area=S(a+b);第一步换为area=r*r;,第二步被换为area=a+b*a+b;
正确的宏定义是#define S(r) (r)*(r)
(2)宏名和参数的括号间不能有空格
(3)宏替换只作替换,不做计算,不做表达式求解
(4)函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存
(5)宏的哑实结合不存在类型,也没有类型转换。
(6)函数只有一个返回值,利用宏则可以设法得到多个值
(7)宏展开使源程序变长,函数调用不会
(8)宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)

(1)简单的宏定义:#define<宏名><字符串>

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

(2)带参数的宏定义#define<宏名> (<参数表>)<宏体>

#defineMAX(a,b)((a)>(b)?(a):(b))

2、不能忽略宏定义中的空格

下面的宏定义中,f是否带了参数呢?

#definef(x)((x)+1)

答案是否定的,在f与(x)之间存在一个空格,导致变成了如下定义:

#define  f   (x)((x)+1)
poYBAGM0ADeACSuDAABCskHOT70774.png

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

    关注

    180

    文章

    7597

    浏览量

    136154
  • 宏定义
    +关注

    关注

    0

    文章

    50

    浏览量

    9001
收藏 人收藏

    评论

    相关推荐

    C语言中常用的定义

    写好C语言,漂亮的定义很重要,使用定义可以防止出错,提高可移植性,可读性,方便性等等。下面列
    发表于 10-18 10:05 1654次阅读

    C语言中定义的用法和使用场景

    C语言中,预定义是由编译器提供的一组特殊标识符,可以在程序中直接使用,无需进行额外的定义
    发表于 08-16 16:12 450次阅读

    C语言中定义的应用

    C语言中定义是一种预处理指令,用于在代码中定义和使用常量、函数或代码片段的替代。
    发表于 08-17 15:33 755次阅读

    C语言中定义的使用技巧

    #define命令是C语言中的一个定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为
    发表于 09-05 10:12 1055次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言中</b><b class='flag-5'>宏</b><b class='flag-5'>定义</b>的使用技巧

    让keil编辑器支持二进制数据

    了,在这里与大家分享一个简单的实现方法。就是利用C语言中定义#defineB0010_00000x20有了这样的
    发表于 05-02 19:10

    labview中有类似于c语言中定义

    如题,labview中有类似于c语言中定义吗 define xxx XXX。。。多谢~
    发表于 10-05 15:04

    STM32入门系列-使用C语言封装寄存器

    根据寄存器的概念,我们可以使用 C 语言中定义对寄存器进行定义。具体代码如下: //定义
    发表于 11-24 10:33

    c语言中定义是什么意思

    #define CLASS(type) \typedef struct type type; \struct type搞不清楚这个是什么意思。。。求解释。
    发表于 03-12 04:20

    c语言中常用的定义有哪些?

    c语言中常用的定义有哪些?
    发表于 04-28 06:01

    C语言中是什么

    第五章 性能优化5.1 使用定义  在C语言中是产生内嵌代码的唯一方法。对于嵌入式系统而言,为了能达到性能要求,
    发表于 12-15 08:20

    #ifndef、#def、#endif使用方法

    详细介绍了C语言中定义的用法,条件编译,定义
    发表于 11-17 10:30 9次下载

    汇总和深挖C语言中定义所有的知识点

    知识点在刚开始接触时,我感觉比较难懂、不好理解,那么以后不论我花多长时间去研究这个知识点,心里会一直认为该知识点比较难,也就是说第一印象特别的重要。 就比如 C 语言中定义,好像跟
    的头像 发表于 05-03 18:31 2649次阅读
    汇总和深挖<b class='flag-5'>C</b><b class='flag-5'>语言中</b><b class='flag-5'>宏</b><b class='flag-5'>定义</b>所有的知识点

    深度解读定义所有的知识点

    难,也就是说第一印象特别的重要。 就比如 C 语言中定义,好像跟我犯冲一样,我一直觉得定义
    的头像 发表于 05-25 10:14 3000次阅读
    深度解读<b class='flag-5'>宏</b><b class='flag-5'>定义</b>所有的知识点

    c语言定义可以嵌套吗?

    c语言定义可以嵌套吗? C语言
    的头像 发表于 09-04 17:38 3094次阅读

    c语言带参数的定义

    c语言带参数的定义  C语言
    的头像 发表于 09-04 17:45 2347次阅读