你能用%u打印一个宏吗?
#define MAX 10
printf("%u", MAX);
Run Code Online (Sandbox Code Playgroud)
这样做是否合法并期望获得10分?
没有"宏变量"这样的东西.宏观扩展在编译过程的早期发生,在有"变量"甚至类型的任何真实概念之前.这是一个文字替代品.
你的代码完全等同于
printf("%u", 10);
Run Code Online (Sandbox Code Playgroud)
这将打印10.
有一个轻微的并发症.常量10是类型int,而%u格式需要类型的参数unsigned int.使用%d而不是使用更有意义%u.但是,对应有符号和无符号类型(如int和unsigned int)的值几乎可以作为函数参数互换,只要该值在两者的范围内即可.(printf("%u", -10)可能有问题.)