【宏定义】——为什么使用 do{} while(0) 结构

不使用 do while(0)

#define MY_MACRO(x) \
    printf("Hello "); \
    printf("%d", x);

如果有 if 判断代码

if  (x)
	MY_MACRO(x)

那么宏展开后就是

if (x)
    printf("Hello ");
    printf("%d", x);

第二个语句并没有在 if 成立时执行

上述问题可以用 {} 解决

#define MY_MACRO(x) {
      
       \
    printf("Hello "); \
    printf("%d", x);  \
    }

if (a)
  MY_MACRO(a);
else
  MY_MACRO(b);

那宏展开后就是

if (a)
 {
    
    
    printf("Hello ");
    printf("%d", x);
 };
else
  MY_MACRO(b);

在if-else 语句中 }; 这种结构是会报错的

使用 do while(0) 结构

#define MY_MACRO(x) do {
      
       \
    printf("Hello "); \
    printf("%d", x); \
} while(0)

完美解决上述问题

if (a)
  do
  {
    
    
    printf("Hello ");
    printf("%d", x);
  } while (0);
else
  do
  {
    
    
    printf("Hello ");
    printf("%d", x);
  } while (0);

猜你喜欢

转载自blog.csdn.net/tyustli/article/details/132031189