C多行宏问题:为什么不在多行宏定义中使用if(1){...}而不是do {...} while(0)

cnn*_*cza 2 c c++ gcc

我想调用循环中的多行宏来打破/继续它.

如果我在多行宏定义中使用"do {...} while(0)",则break/continue仅对"do {...} while(0)"有效,而不是调用此宏的循环.所以我考虑在多宏定义中使用"if(1){...}".

#define EXIT_CIRCULATION() \
        if(1){ \
           break; \
        }

void func(){
    while(1){
       ...
       EXIT_CIRCULATION();
       ...
    }
}
Run Code Online (Sandbox Code Playgroud)

但我怀疑在宏定义中使用"if(1){...}"是一种好方法,因为我在互联网上找不到任何例子.

谢谢!

Bas*_*tch 10

如果您编写类似的东西

 if (somecondition)
    EXIT_CIRCULATION();
 else
    break;
Run Code Online (Sandbox Code Playgroud)

那么你的宏的扩展将不会像你直觉所期望的那样.这else将适用于你if (1),永远不会发生.