1.代码分块,使得代码更加直观易读;
2.当宏中有两条及以上语句时,
如#define FUNC() {func1(); func2;}
这个宏放在if..else语句中如果写成if()FUNC();else{...}就会宏展开多了一个分号而报错;
写成#define FUNC() do{func1(); func2;}while(0)就可以避免这个问题。
3.可以结合break间接的实现goto语句的功能。
4.定义单一的函数块来完成复杂的操作,里面可以申明与外面相同名字的变量,作用域不同。