找回密码
 注册
关于网站域名变更的通知
查看: 360|回复: 1
打印 上一主题 下一主题

C语言宏定义

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-1-6 15:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
宏定义的规则和使用解析
5 n% Y. A. F8 F  `
(1)宏定义的解析规则就是:在预处理阶段由预处理器进行替换,这个替换是原封不动的替换。

" a* D! F! b" l8 }5 _  n
(2)宏定义替换会递归进行,直到替换出来的值本身不再是一个宏为止。
2 }* q+ ~3 d+ W& ~- }
#define M 10

" W  f  a1 X2 M
#define N M
* r7 D' T) B( k+ T! r% x, p$ k
(3)一个正确的宏定义式子本身分为3部分,第一部分是#define,第二部分是宏名,剩下的所有为第三部分。
" q/ D5 }' N) }
(4)宏可以带参数,称为带参宏。带参宏的使用和带参函数非常像,但是使用上有一些差异。在定义带参宏时,每一个参数
, {9 H& O& e$ h  c" D9 E
在宏体中引用时都必须加括号,最后整体再加括号,括号缺一不可。
- a- l) E2 `9 z2 z" n
#define X(a,b) ((a)*(b))
  }7 }- E1 _6 \3 Q2 m: ?
2、宏定义实例1:MAX宏,求2个数中较大的一个

, ^" Y- X9 G: D% q5 y1 a
#define MAX(a,b) ((a)>(b) ? (a) : (b))

# A! ^2 Q$ H3 k6 x5 H6 x  f4 \
关键:

- f3 v- J# Y& W' h! K* \8 ?
第一点:要想到使用三目运算符来完成。

: W- ~7 T* M4 ]9 m; i! s  j
第二点:注意括号的使用
  Q" D* [7 D/ y; B/ c3 q# W" H
3、宏定义实例2:SEC_PER_YEAR,用宏定义表示一年中有多少秒

0 j( e' S2 t0 S
#define SEC_PER_YEAR   (31536000)        //可行,但是不推荐

( B3 D$ v. ]# _- @8 ?' u7 ^
#define SEC_PER_YEAR   (365*24*60*60)    //错误,默认int类型,超过类型存储范围了,int本身是有符号的

+ p' G9 ~" v9 _( k8 s9 h* ~' G: G
#define SEC_PER_YEAR   (365*24*60*60UL)  //正确写法,将有符号变成无符号,范围扩大一倍
" k' T4 T; V- P/ y) s% ?. F

该用户从未签到

2#
发表于 2021-1-6 15:58 | 只看该作者
宏可以带参数,称为带参宏。带参宏的使用和带参函数非常像,但是使用上有一些差异。在定义带参宏时,每一个参数在宏体中引用时都必须加括号,最后整体再加括号,括号缺一不可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 23:49 , Processed in 0.140625 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表