And*_*pin 1 c libusb libusb-1.0
可能重复:
为什么在C/C++宏中有时会出现无意义的do/while和if/else语句?
做{...}而(0)有什么好处?
探索libusb-1.0.9源代码,我找到了这样的line(./os/poll_windows.c:78):
#define CHECK_INIT_POLLING do {if(!is_polling_set) init_polling();} while(0)
Run Code Online (Sandbox Code Playgroud)
至于我,这是一样的:
#define CHECK_INIT_POLLING if(!is_polling_set) init_polling();
Run Code Online (Sandbox Code Playgroud)
是否有理由循环该表达式?
更新:
在答案之后,我仍然无法意识到会出现什么问题,以下示例有助于:
#include <stdio.h>
#define TEST if(test) foo();
#define TEST_DO do { if(test) foo(); } while(0)
int test = 1;
void foo() {
printf("%s", "Foo called");
}
int main(int argc, char** argv) {
if(argc > 1) TEST_DO; /* LINE 12 */
else printf("%s", "skipping...");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果放在TEST第12行,编译器将给出错误"error: ‘else’ without a previous ‘if’".
希望,这会有所帮助.
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |