【发布时间】:2018-11-08 15:47:13
【问题描述】:
在下面的示例代码中,printf 是如何知道要为 uint8_t 打印的大小,而提到的格式只有“0x%x”,而 passd 类型是 uint32_t? printf 怎么知道第一次调用它必须打印 4 个字节,第二次调用它必须只打印 1 个字节?
uint32_t X = 0xAABBCCDD;
printf("uint32_t 0x%x\n", (uint32_t) X);
printf("uint8_t 0x%x\n", (uint8_t) X);
输出
uint32_t 0xaabbccdd
uint8_t 0xdd
【问题讨论】:
-
它只是不打印前导零。
-
所有小于
int的值都被提升并作为int传递给printf(或任何其他可变参数函数)。这就是它起作用的原因。尝试使用更大的类型,你会遇到问题。
标签: c pointers printf variadic-functions