重複の可能性:
C/C++ マクロに無意味な do/while ステートメントと if/else ステートメントがあるのはなぜですか?
do { … } while (0) 何の役に立つの?
libusb-1.0.9 のソース コードを調べていると、次のような行 ( ./os/poll_windows.c:78
)が見つかりました。
#define CHECK_INIT_POLLING do {if(!is_polling_set) init_polling();} while(0)
私に関しては、これは次のようなものです:
#define CHECK_INIT_POLLING if(!is_polling_set) init_polling();
その式をループする理由はありますか?
アップデート:
答えた後、何が悪いのかまだわかりませんでした。次の例が役に立ちました。
#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;
}
12行目に置くTEST
と、コンパイラはエラーを出します"error: ‘else’ without a previous ‘if’"
。
うまくいけば、これは誰かを助けるでしょう。