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

What is the difference between the %PRId and %d format characters?

考虑以下代码:

#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 在您的 hardware/machine 上的类型定义有什么关系吗?

int 使用 %dint32_t 使用 PRId32

也许在您的平台上 int32_t 只是 int 的类型定义,但通常情况下并非如此。 使用错误的说明符会调用未定义的行为,应该避免。

正如@EricPostpischil 指出的那样,请注意 %d 用于带引号的格式字符串内部,而 PRId32 用于外部。这样做的原因是 PRId32 是一个扩展为字符串文字然后连接起来的宏。

类型 int 需要至少有 16 位的值表示,尽管在大多数台式计算机和编译器上它将有 32 位。所以 int 通常可能与上面的 int16_tint32_tint64_t 或 none 相同。

int类型的变量使用"%d",对int32_t.

类型的变量使用"%" PRId32