%PRId和%d格式字符有什么区别?

时间:2019-01-19 14:22:14

标签: c printf conversion-specifier length-modifiers

考虑以下代码:

#include <stdio.h>
#include <inttypes.h>

void main(void)
{
    int32_t a = 44;

    fprintf(stdout, "%d\n", a);
    fprintf(stdout, "%"PRId32"\n", a);
}

何时使用%d更好,何时使用"%"PRId32更好?这两个格式字符有何不同?这与在硬件/机器上键入int32_t的方式有什么关系吗?

2 个答案:

答案 0 :(得分:6)

%d使用int,对PRId32使用int32_t

也许在您的平台int32_t上只是int的typedef,但这通常是不正确的。 使用错误的说明符会引起未定义的行为,应该避免。

@EricPostpischil指出,%d用于带引号的格式字符串,而PRId32用于外部。原因是PRId32是一个宏,它扩展为字符串文字,然后进行连接。

答案 1 :(得分:4)

类型int必须具有至少16位的值表示形式,尽管在大多数台式计算机和编译器中它将具有32位。因此,int通常可以与int16_tint32_tint64_t相同,也可以不与以上任何一个相同。

"%d"用于类型int的变量,并将"%" PRId32用于类型int32_t的变量。