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