这个宏是不是一点作用都没有?
宏的定义如下:
- #if !(defined (G_STMT_START) && defined (G_STMT_END))
- # define G_STMT_START do
- # define G_STMT_END while (0)
- #endif
- #define g_return_val_if_fail(expr,val) G_STMT_START{ (void)0; }G_STMT_END
复制代码这个宏扩展开应该是这样的吧:
do
{
(void)0;
}
while(0)
这样的话,这个宏岂不是什么意义都没有,不懂,请高手指教。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
宏的参数都不用的?
是啊 。
#if !(defined (G_STMT_START) && defined (G_STMT_END))
# define G_STMT_START do
# define G_STMT_END while (0)
#endif
在gmacros.h 里面定义
#define g_return_val_if_fail(expr,val) G_STMT_START{ (void)0; }G_STMT_END
在gmessages.h里面定义
都是GTK+的源代码 ,不明白这样做是干什么。
莫非是为了以后扩展?
前面那不有个判断么? 有的时候有处理, 有的时候没处理吧
等达人解答。这个宏究竟有什么作用呢?无论展开与否都没有神马意义的样子……或许我Lvl不够
回复 1# qfmeal
LZ你只给出了这个宏的定义。
linux内核代码中也有这种do{...} while(0)宏定义,主要是防止 if 语句下误用导致的悬垂问题。
看上去这个宏确实没有用,不过你动手搜一下哪里用到了这个宏,它怎么用的不就得了?......