使用printf在C中打印宏变量

时间:2017-08-25 00:11:32

标签: c macros

你能用%u打印一个宏吗?

#define MAX 10
printf("%u", MAX);

这样做是否合法并期望得到10?

1 个答案:

答案 0 :(得分:5)

没有“宏变量”这样的东西。宏观扩展在编译过程的早期发生,在有“变量”甚至类型的任何真实概念之前。这是一个文字替代。

您的代码完全等同于

printf("%u", 10);

将打印10

有一个轻微的并发症。常量10的类型为int,而%u格式则需要类型为unsigned int的参数。使用%d而不是%u会更有意义。但是,对应的有符号和无符号类型(如intunsigned int)的值几乎可以作为函数参数互换,只要该值在两者的范围内即可。 (printf("%u", -10)可能会有问题。)