[问题] 请问空的do{} while(0)有什么用途

楼主: filiaslayers (司马云)   2016-05-11 17:25:55
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
mips gcc
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
NO
问题(Question):
在realtek SDK里看到这个
#define open_logs() do {} while(0)
还有这个 #define log_error_doc(req) do {} while(0)
虽然我知道一般在macro用do while(0)是要避免if出错,不过这边do的{}没塞东西orz
所以到底有什么用处呢?
作者: bibo9901 (function(){})()   2016-05-11 17:39:00
legacy code?
作者: LPH66 (-6.2598534e+18f)   2016-05-11 19:50:00
没东西就代表真的没东西, 也就是 no-op一个可能是如一楼说的旧程式码的取代, 另一个可能像这名字应该是一些 log 的东西, 所以比较接近“删去的除错程式”也就是有可能原先这里是一个除错用程式码把东西倒进 log 里后来要放出去时要删除这些除错 log 所以取代成空叙述不过这种状况理论上把 macro 改订成空白应该也是可行的
作者: shadow0326 (非议)   2016-05-11 20:48:00
我看过这样写来当假goto的...XDdo{...if(err) break;...}while(0)
作者: boss0405 (boss)   2016-05-11 21:10:00
如果订成空白那如果有个if里面只有print_log,那会变成空的if,若是又没有大括号会有问题
作者: prismwu   2016-05-11 21:13:00
常用来做假GOTO 由其是要检查一堆又不太可能会出错的*尤其
作者: cplusplus (对的人难寻)   2016-05-11 23:25:00
都拿来当假goto+1
作者: CaptainH (Cannon)   2016-05-11 23:34:00
真有这需求干嘛不直接用goto
作者: Qbsuran (Qbsuran)   2016-05-11 23:48:00
1. 可以在区块内宣告变量不影响外面 2.可以用break取代goto

Links booklink

Contact Us: admin [ a t ] ucptt.com