固定宽度整数的格式说明符是什么?

3

当处理int32_t、uint16_t和int8_t等类型时,printf要使用什么格式说明符?

使用%d、%i等会导致程序不可移植。使用PRIxx宏是最佳方法吗?

2个回答

3

使用PRIxx宏是最好的方法吗?

据我所知,是的。

编辑:另一种解决方案是将其强制转换为至少与要打印的类型一样宽的类型。例如,int 至少有2个字节宽度,可以使用 printf("%d\n", (int)some_var) 打印一个 int16_t


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类型的系统上,你可能会得到不同的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接