找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1577|回复: 5
收起左侧

C语言里面这种带括号的宏定义有什么作用

[复制链接]
ID:700956 发表于 2023-4-7 12:44 | 显示全部楼层 |阅读模式
  • #define                C_PORTA                                        (PORTA)
  • #define                C_PORTB                                        (PORTB)
  • #define                C_PORTC                                        (PORTC)
  • #define                CST_KEY1_BIT                        (C_PORTB & C_KEY_BIT6)                        //定义按键地址


像这种,定义的时候最后的参数带括号是啥意思?看不太懂
下面是原贴。
http://www.51hei.com/bbs/dpj-226114-1.html



回复

使用道具 举报

ID:69038 发表于 2023-4-7 16:55 | 显示全部楼层
#define 即 1(源 )映射到 2(目标)上 即在“PORTA”出现的在方用“C_PORTA"代替。至于参数带括号,应无差别,至少Keil C51是这样的
回复

使用道具 举报

ID:883242 发表于 2023-4-7 20:12 | 显示全部楼层
用括号包起来是防止展开后发生歧义的,括号还是很简单的,你还没见过用do {} while(0)把几条语句包起来防止展开后发生歧义的。
回复

使用道具 举报

ID:291668 发表于 2023-4-7 20:43 | 显示全部楼层
没啥区别,编译结果一样的。可能是个人习惯吧
回复

使用道具 举报

ID:485350 发表于 2023-4-8 09:39 | 显示全部楼层
#define CALC(X)  X + 3
   VALUE = (CALC(1) * 3)
   展开 VALUE = 1 + 3 * 3      结果VALUE为10

#define CALC(X) (X + 3)
   VALUE = (CALC(1) * 3)
   展开 VALUE = ((1 + 3) * 3)    结果VALUE为12
回复

使用道具 举报

ID:59202 发表于 2023-4-8 20:18 | 显示全部楼层
define后面的表达式用括号括上是正确且严谨的写法,三楼说的是对的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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