我们用一个例子来说明吧。
假如我们想用宏实现打印某数的整数部分和小数部分,最简单的实现是:
<code>int
iIntPart; \double
dDecimalPart; \ iIntPart = (int
)num; \ dDecimalPart = num - iIntPart; \ printf("Integer part: %d\n"
, iIntPart); \ printf("Decimal part: %lf\n"
, dDecimalPart);void
main
() { PrintNumber(12.89
); }/<code>
上面的程序可以正常运行:
<code>Integer part:
12
Decimal part:
0.890000
/<code>
但如果这样使用PrintNumber就会出错:
<code>float
fValue = -32
.12
;if
(fValue >0
) PrintNumber(fValue);/<code>
怎么办呢?
我们可以把宏体用花括号包含起来,就像定义函数一样
<code>\ int iIntPart; \ double dDecimalPart; \ iIntPart = (int)num; \ dDecimalPart = num - iIntPart; \ printf("Integer part: %d\n", iIntPart); \ printf("Decimal part: %lf\n", dDecimalPart); \ }
void
main()
{
float
fValue = -32.12;
if
(fValue > 0)
PrintNumber(fValue);
}
/<code>
现在似乎可以高枕无忧了。
但是又有人发现,如果这样使用PrintNumber还是会出错:
<code>if
(fValue >0
)PrintNumber
(fValue);else
printf
("Errror! The value is less than 0.\n"
);/<code>
显然,出错的原因是因为多了一个分号。
如何处理,才能让这个宏和函数的使用效果一样呢?
不知道哪个天才,首先使用do while句式,解决了难题:
<code>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
)void
main
() {float
fValue =-32.12
;if
(fValue >0
) PrintNumber(fValue);else
printf("Errror! The value is less than 0.\n"
); }/<code>
使用do-while句式,可以吸掉一个分号,让我们可以像使用函数一样,来使用宏。
谢谢您的阅读!
#科技新星创作营#