jianhong_wu 发表于 2017-4-2 12:00:43

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

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

晓榭-南通:

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

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

hippo-深圳:
添加大括号的时候,最好加do{xxxx}while(0)的格式。这种写法在linux源码里面遍地都是,这种写法可能是为了代码严谨。
比如:
#define AP_SET_SHORT(ptr, n)do { \
ptr = (n >> 8) & 0xff; \
ptr = (n) & 0xff; \
} 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两种人,初学者或者超级大牛。


页: [1]
查看完整版本: define如何进行多行的宏定义,如何添加大括号"{} "是最佳效果?已解答。