考虑以下代码:
#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
的方式有什么关系吗?
答案 0 :(得分:6)
对%d
使用int
,对PRId32
使用int32_t
。
也许在您的平台int32_t
上只是int
的typedef,但这通常是不正确的。
使用错误的说明符会引起未定义的行为,应该避免。
@EricPostpischil指出,%d
用于带引号的格式字符串,而PRId32
用于外部。原因是PRId32
是一个宏,它扩展为字符串文字,然后进行连接。
答案 1 :(得分:4)
类型int
必须具有至少16位的值表示形式,尽管在大多数台式计算机和编译器中它将具有32位。因此,int
通常可以与int16_t
,int32_t
,int64_t
相同,也可以不与以上任何一个相同。
将"%d"
用于类型int
的变量,并将"%" PRId32
用于类型int32_t
的变量。