考虑以下代码:
#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
您的硬件/机器上的类型定义方式有关吗?
考虑以下代码:
#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
您的硬件/机器上的类型定义方式有关吗?
使用%d
forint
和PRId32
for int32_t
。
也许在您的平台int32_t
上只是一个 typedef ,int
但通常情况并非如此。使用错误的说明符会调用未定义的行为,应该避免。
正如@EricPostpischil 指出的那样,%d
它在带引号的格式字符串PRId32
中使用,而在外部使用。这样做的原因是它PRId32
是一个宏,它扩展为字符串文字,然后被连接起来。
该类型int
需要至少 16 位的值表示,尽管在大多数台式计算机和编译器上它将具有 32 位。所以int
通常可能与 , , 相同,int16_t
或者都不是。int32_t
int64_t
用于"%d"
类型变量,int
用于"%" PRId32
类型变量int32_t
。