Abh*_*ury 1 c embedded loops firmware
我注意到嵌入式C中的编程风格,用于固件编程:
#define WRITE_REGISTER(reg, value) \
do { \
write_to_register(reg, value); \
} while (0)
Run Code Online (Sandbox Code Playgroud)
这是怎么做的... while(0)帮助结束:
#define WRITE_REGISTER(reg, value) write_to_register(reg, value)
Run Code Online (Sandbox Code Playgroud)
正如你在这里看到的那样,do {} while(0)允许在宏中有多行时避免编译错误或工作不正常,并且你尝试以与ac函数相同的方式调用宏(这是每个人都这样做的方式).
作为一个例子(我在这里报告链接中的那个,所以你不需要浏览页面)
#define DO_SOMETHING_HERE(_x) foo(_x); bar(_x);
if( condition )
DO_SOMETHING_HERE(_x);
else
...
Run Code Online (Sandbox Code Playgroud)
将生成编译错误,因为它将导致:
if( condition )
foo(_x); bar(_x);;
else
...
Run Code Online (Sandbox Code Playgroud)
使用do虽然一切都会正常工作,但事实上它将是:
#define DO_SOMETHING_HERE(_x) do{ foo(_x); bar(_x); }while(0)
if( condition )
do{ foo(_x); bar(_x); } while(0);
else
...
Run Code Online (Sandbox Code Playgroud)
请注意,在这种情况下,使用大括号不会保存您,因为:
#define DO_SOMETHING_HERE(_x) { foo(_x); bar(_x); }
if( condition )
{ foo(_x); bar(_x); };
else
...
Run Code Online (Sandbox Code Playgroud)
仍会产生错误.
在你的情况下,我认为它只是一种编码风格,因为只有一行.