独闷闷网

 找回密码
 立即注册
搜索
查看: 3727|回复: 0
打印 上一主题 下一主题
收起左侧

[原创] define如何进行多行的宏定义,如何添加大括号"{} "是最佳效果?已解答。

[复制链接]
跳转到指定楼层
楼主
发表于 2017-4-2 12:00:43 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 jianhong_wu 于 2017-4-2 12:03 编辑

晓榭-南通:

define进行多行宏定义是这样吗?

李猛-辽宁:
对,后面有一个反斜杠“\”。

hippo-深圳:
添加大括号的时候,最好加do{xxxx}while(0)的格式。这种写法在linux源码里面遍地都是,这种写法可能是为了代码严谨。
比如:
  1. #define AP_SET_SHORT(ptr, n)  do { \
  2. ptr[0] = (n >> 8) & 0xff; \
  3. ptr[1] = (n) & 0xff; \
  4. } while (0)
复制代码

zopherv-深圳:
do { } while (false); 是另一种黑魔法。不仅起到作用域的作用,并且支持在中途 break; 跳出
相当于给了你一个受控、不破坏结构、向后跳转的 goto。不是所有局部代码都必要(值得)提取成一个函数,有些时候我们只是想要一些简单的划分
这时用 do { } while (false); 直接替代内联函数,是个可选的方案。


hippo-深圳:
对,我也利用了do while(0)中途break功能,有些地方不好return,一定要调到末尾,就是利用goto逆向转换到do while(0),解决一些复杂代码。

zopherv-深圳:
从程序的控制流分析来说,一般认为goto以下才是安全的:
(1)后跳,不能前跳
(2)不能从浅的层级,跳入深的层次,例如不能从for的外边跳进去。


hippo-深圳:
goto两种人,初学者或者超级大牛。


乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2024-11-29 20:58 , Processed in 0.163112 second(s), 20 queries .

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