C 固定宽度整数的格式说明符?
在处理诸如int32_t、uint16_t和int8_t等类型时,printf使用哪些格式说明符 使用%d、%i等不会产生可移植程序。使用PRIX宏是最好的方法吗 使用PRIX宏是最好的方法吗 据我所知,是的C 固定宽度整数的格式说明符?,c,C,在处理诸如int32_t、uint16_t和int8_t等类型时,printf使用哪些格式说明符 使用%d、%i等不会产生可移植程序。使用PRIX宏是最好的方法吗 使用PRIX宏是最好的方法吗 据我所知,是的 编辑:另一种解决方案是强制转换为至少与要打印的类型一样宽的类型。例如,int至少有2个字节宽,可以使用printf(“%d\n”,(int)some\u var)打印int16\u t,是的,如果您使用的是新类型,您确实应该使用新的格式说明符 这是最好的方法,因为实现已经完成了确保格式字符
编辑:另一种解决方案是强制转换为至少与要打印的类型一样宽的类型。例如,
int
至少有2个字节宽,可以使用printf(“%d\n”,(int)some\u var)打印int16\u t
,
是的,如果您使用的是新类型,您确实应该使用新的格式说明符
这是最好的方法,因为实现已经完成了确保格式字符串对类型正确的繁重工作
例如:
#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;
}
#包括
#包括
#包括
内部主(空){
int32_t i32=40000;
printf(“%d\n”,i32);//可能有效。
printf(“%”PRId32“\n”,i32);//将正常工作。
返回0;
}
显示了两种方法
然而,实际上并不能保证第一个会像你期望的那样。例如,在具有16位int
类型的系统上,很可能会得到不同的值