c语言中宏定义的一个问题
最近看RTT源码时看到一个宏定义是这样定义的
#define RT_OBJECT_HOOK_CALL(func, argv) do { if ((func) != RT_NULL) func argv; } while (0)
定义了一个钩子函数,我知道这个宏定义是调用func函数指针,argv是参数,但总感觉哪里不太对。各位有对宏定义这部分的资料吗?我对这里总是不太清楚
如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

评论(26)








回复
写宏一定要加括号,哪怕是
#define f(x) x * x也要写成#define f(x) ((x) * (x)),因为编译器是提前用 ((x) * (x)) 替换代码中的任何 f(x) 这样的字符文本,然后才去转化成机器码。

发布评论
需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。