社区
其它技术问题
帖子详情
这个宏定义为什么需要大括号
liubo1977
2004-12-22 09:06:07
在写windows驱动程序时,发现在wdm.h中有这样一个宏定义#define RemoveHeadList(ListHead) \
(ListHead)->Flink;\
{RemoveEntryList((ListHead)->Flink)}
其中在最后一句{RemoveEntryList((ListHead)->Flink)}中,为什么要加一对大括号,百思不得其解,望高手指教。
...全文
1353
29
打赏
收藏
这个宏定义为什么需要大括号
在写windows驱动程序时,发现在wdm.h中有这样一个宏定义#define RemoveHeadList(ListHead) \ (ListHead)->Flink;\ {RemoveEntryList((ListHead)->Flink)} 其中在最后一句{RemoveEntryList((ListHead)->Flink)}中,为什么要加一对大括号,百思不得其解,望高手指教。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
29 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Wolf0403
2005-03-02
打赏
举报
回复
RemoveEntry 还是一个宏定义吧……
Varg
2005-02-15
打赏
举报
回复
安全
gaoxiaolin_311
2005-01-29
打赏
举报
回复
同意 forever939的说法。
cityvagrant
2005-01-29
打赏
举报
回复
我也同意青禾的看法,应该是考虑宏中有宏有可能带来的重定义问题。
sharkhuang
2005-01-15
打赏
举报
回复
do{}while(0)
基本上是这样可能放在if语句中间的标准写法
gentlelover
2005-01-13
打赏
举报
回复
blueskyzsz(青禾)说的对!
greenteanet
2005-01-13
打赏
举报
回复
关注ing......
prolj
2005-01-07
打赏
举报
回复
只知道MS的Windows MFC .net一类的东西垃圾,不想DDK也如此垃圾.MS快到头了
blueskyzsz
2004-12-29
打赏
举报
回复
就是为了限定一个作用域,如果中间有临时变量的话,连着调用两次这个宏,
编译就会出现错误,变量重复定义. 所以一般的宏定义复杂的话,
最好在外面加上{}
^_^
forever939
2004-12-29
打赏
举报
回复
没有分号,可能RemoveEntryList((ListHead)->Flink)是个宏
只能这样解释l啦
CMyMfc
2004-12-29
打赏
举报
回复
just for 安全
ipgk
2004-12-27
打赏
举报
回复
安全起见,比如RemoveEntryList()这个宏里面有定义中间变量,那么一定要加大括号限定作用域,不然调用这个宏两次就会引起重复定义。
test22004
2004-12-27
打赏
举报
回复
安全的规范
Meteorlet
2004-12-26
打赏
举报
回复
{RemoveEntryList((ListHead)->Flink)}
都没有分号,肯定也是个宏了,我猜用大括号就是一个作用域,不会引起问题吧
Dong
2004-12-24
打赏
举报
回复
呵呵!严重关注……
avalonBBS
2004-12-24
打赏
举报
回复
帮顶下,期待有人解答 :)
wingfiring
2004-12-23
打赏
举报
回复
RemoveEntryList很可能是个宏嘛,要展开的。
你的这个RemoveHeadList不就是个宏?对比一下。
nicknide
2004-12-23
打赏
举报
回复
恩,一般定义宏的宏名都是大写的说,除了assert之外,然后标准还有建议说 宏后面不要有分号,也就是自带分号结尾,这个地方该不会也有那样的意思吧(不要加分号)
所以这么写:?
RemoveHeadList(alist)
//other coding
瞎猜的,楼主勿怪
yjh1982
2004-12-23
打赏
举报
回复
用do{}while(0)更好
liubo1977
2004-12-22
打赏
举报
回复
这是我写windows的驱动程序时,在ddk的wdm.h文件中碰到的一个宏,我觉得那个大括号不应该要
加载更多回复(9)
宏定义
中的参数
需要
加括号的原因
加括号是为了处理表达式参数(即宏的参数可能是个算法表达式)时不出错,因为宏替换就是文本替换,所以如果有以下情况: #define COM(A,B) (A)*(B) 那么COM(6+5,3)这个调用会怎么替换呢?它会换成这样: (6+5)*(3) 显然这是和COM宏的意图一致的,但是如是去掉了定义中括号,即写成这样: #define COM(A,B) A*B 那么
宏定义
里面为什么要加括号?
在
宏定义
当中,常常可以看到宏的参数以及整个宏的定义都被小括号包围,就像下面的 MIN、MAX、ABS 宏一样: 上面的图截取自 iOS 的系统库,那为什么它们
需要
这些括号包围起来呢? 下面假如我们自定义了宏 ceil_div,代码如下: #define ceil_div(x, y) (x + y - 1) / y 这个宏的本意是将 x 除以 y,然后将得到的结果向上取整。比如 x = 4,...
宏定义
和括号
为了尽量避免边际效应,
宏定义
时常要注意括号的使用。 例如在编写一个简单的MIN宏时,我们
需要
加上足够括号才能保证结果尽可能的正确。 #define MIN(X,Y) ((X) 小提醒:在
宏定义
中最好全部使用大写字母,以区别正规的代码。 但有些情况下,加上括号却是“画蛇添足”的。 例如,用预处理指令#define声明一个常数,用以表明1年中有多少秒。 #define SE
C++中
宏定义
字加括号的意义
1.示例 #define DI_INPUT_NUM (11) 2.为什么
宏定义
要加括号 强烈建议
宏定义
要给表达式加括号,这是一种良好的编程习惯,可以避免出错!
宏定义
的本质是直接替换!!!
宏定义
后面的表达式直接替换
宏定义
名字! 下面举例来说明 下面两种
宏定义
,产生了截然不同的结果: #define DNUM 11+2 //
宏定义
方式1 #define DNUM (11+2) //
宏定义
方式2 在程序中使用到了
C语言-
宏定义
中括号的问题
最近面试的时候 面试官让我写了一个用
宏定义
返回两个参数中的较小值,我直接就写了 #define min(a,b) (a<b)?a:b 然后面试官问了我一句
需要
写括号么,当时问的有些懵,犹豫之后说应该不
需要
了吧。 回来之后就仔细查了一下,发现自己还是犯了错误。 首先我们
需要
知道
宏定义
是怎么在代码中使用的,在代码预编译阶段,
宏定义
是直接替换的 例如: 在代码中我们使用了min(a,b),而在代码预编译阶段就会直接将min(a,b) 直接替换成a<b?a:b 因为替换的原因,所以就可能会存在一
其它技术问题
3,881
社区成员
9,054
社区内容
发帖
与我相关
我的任务
其它技术问题
C/C++ 其它技术问题
复制链接
扫一扫
分享
社区描述
C/C++ 其它技术问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章