3

考虑以下代码:

#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您的硬件/机器上的类型定义方式有关吗?

4

2 回答 2

6

使用%dforintPRId32for int32_t

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

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

于 2019-01-19T14:25:09.850 回答
4

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

用于"%d"类型变量,int用于"%" PRId32类型变量int32_t

于 2019-01-19T14:25:16.927 回答