这个宏定义为什么需要大括号

liubo1977 2004-12-22 09:06:07
在写windows驱动程序时,发现在wdm.h中有这样一个宏定义#define RemoveHeadList(ListHead) \
(ListHead)->Flink;\
{RemoveEntryList((ListHead)->Flink)}
其中在最后一句{RemoveEntryList((ListHead)->Flink)}中,为什么要加一对大括号,百思不得其解,望高手指教。
...全文
1353 29 打赏 收藏 转发到动态 举报
写回复
用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)

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧