代码分块
此时和{}作用是一样的,实现复杂功能时,块内定义变量们可以起到避免命名冲突以及缩短作用域的功能。
辅助定义复杂宏
void MyFunctionA() { printf(“exec MyFunctionA\n”); }
void MyFunctionB() { printf(“exec MyFunctionB\n”); }
if (false) MY_MACRO; // 展开
if (false) MyFunctionA(); MyFunctionB();
2. 多加分号`;`错误```cpp#define MY_MACRO {MyFunctionA(); MyFunctionB();}// 调用时加上分号编译报错if (false)MY_MACRO; // 加上分号后报错: 'else' without a previous 'if'elseprintf("else\n");
通过do{}while(0)定义复杂宏
#define MY_MACRO \do { \MyFunctionA(); \MyFunctionB(); \} while (0) \
避免使用goto对程序流做统一控制
void foo() {int *pi = new int(10);do {// 提前返回时需要释放资源, 防止内存泄漏if (false) {break;}// 发生异常时需要释放资源, 防止内存泄漏try {// do something} catch (std::runtime_error err) {break;}} while (0);// 提前返回、发生异常和正常返回时都会走到这里释放资源delete pi;pi = nullptr;return;}
