【发布时间】:2014-12-01 19:10:16
【问题描述】:
在浏览LinCAN驱动源码时,我发现了一些令我困惑的宏。
#else /*CONFIG_PREEMPT*/
#define can_preempt_disable() do { } while (0)
#define can_preempt_enable() do { } while (0)
#endif /*CONFIG_PREEMPT*/
我明白了
的用处do {
...;
if(condition) break;
...
} while (0);
使用break 作为throw 的一种。我半理解包装一系列函数,如
#define FOO() do { foo(); bar(); } while (0)
避免使用无括号 if 的警告。我知道有时#define 需要“无操作语句”。但为什么是这种特殊的类型?具体来说,空括号,错误条件,do...while?一些我不太理解的语法警告?
【问题讨论】: