有一个很妙的地方在于这里的 do{} while(0)的用法,这个宏定义看起来每必要但是在宏替换时用处很大,比如
#include ;
/*#define PRINT()
do{ printf("I am in the world!n");
printf("I love the world!n"); } while(0)
*/
#define PRINT()
{ printf("I am in the world!n");
printf("I love the world!n"); }
int main() {
int i;
printf("give me a value:n");
scanf("%d", &i);
if(i > 5)
PRINT();
else
printf("success!n");
return 0;
}
如果直接编译,这段代码是有问题的,因为在 if 语句后会因为多出的一个分号导致错误,但是若采用被注释的那一段定义 PRINT()则不会有问题。