在处理int32_t,uint16_t和int8_t等类型时,printf使用什么格式说明符?
使用%d,%i等不会产生便携式程序。使用PRIxx宏是最好的方法吗?
答案 0 :(得分:3)
使用PRIxx宏是最好的方法吗?
据我所知,是的。
编辑:另一种解决方案是转换为至少与要打印的类型一样宽的类型。例如,int
宽度至少为2个字节,可以使用int16_t
打印printf("%d\n", (int)some_var)
。
答案 1 :(得分:0)
是的,如果你正在使用新类型,你真的应该使用新的格式说明符。
这是最好的方法,因为实现已经完成了确保格式字符串对于类型正确的繁琐工作。
所以,例如:
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
int main (void) {
int32_t i32 = 40000;
printf ("%d\n", i32); // might work.
printf ("%" PRId32 "\n", i32); // will work.
return 0;
}
显示两种方式。
然而,实际上没有保证第一个将按预期执行。例如,在具有16位int
类型的系统上,您可能会获得不同的值。