根据参考测试
.h
#include <stdio.h>
#define PrintNumber1(num) \
int iIntPart; \
double dDecimalPart; \
iIntPart = (int)num; \
dDecimalPart = num - iIntPart; \
printf("Integer part: %d\n", iIntPart); \
printf("Decimal part: %lf\n", dDecimalPart); \
#define PrintNumber2(num) { \
int iIntPart; \
double dDecimalPart; \
iIntPart = (int)num; \
dDecimalPart = num - iIntPart; \
printf("Integer part: %d\n", iIntPart); \
printf("Decimal part: %lf\n", dDecimalPart); \
}
#define PrintNumber3(num) do { \
int iIntPart; \
double dDecimalPart; \
iIntPart = (int)num; \
dDecimalPart = num - iIntPart; \
printf("Integer part: %d\n", iIntPart); \
printf("Decimal part: %lf\n", dDecimalPart); \
}while(0)
int test01();
.c
#include "PrintNumber.h"
static void test01_01(){
PrintNumber1(12.89);
}
static void test01_02(){
float fValue = 32.12;
if (fValue > 0)
PrintNumber2(fValue);
}
static void test01_03(){
float fValue = 32.12;
if (fValue > 0)
PrintNumber3(fValue);
else
printf("para err\n");
}
int test01(){
test01_01();
test01_02();
test01_03();
return 0;
}
总结起来就是:这样定义的目的是:使用do-while句式,可以吸掉一个分号,让我们可以像使用函数一样,来使用宏。
参考:
c语言宏定义_为什么C语言中复杂的函数式宏定义常用do while(0)的方式定义?_weixin_39676930的博客-CSDN博客