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

C %PRId和%d格式字符之间有什么区别?,c,printf,conversion-specifier,length-modifiers,C,Printf,Conversion Specifier,Length Modifiers,考虑以下代码: #include <stdio.h> #include <inttypes.h> void main(void) { int32_t a = 44; fprintf(stdout, "%d\n", a); fprintf(stdout, "%"PRId32"\n", a); } #包括 #包括 真空总管(真空) { int32_t a=44; fprintf(标准输出,“%d\n”,a); fprintf(标准输出,“%”PR

考虑以下代码:

#include <stdio.h>
#include <inttypes.h>

void main(void)
{
    int32_t a = 44;

    fprintf(stdout, "%d\n", a);
    fprintf(stdout, "%"PRId32"\n", a);
}
#包括
#包括
真空总管(真空)
{
int32_t a=44;
fprintf(标准输出,“%d\n”,a);
fprintf(标准输出,“%”PRId32“\n”,a);
}

什么时候最好使用
%d
,什么时候最好使用
“%”PRId32
?这两种格式字符有何不同?这是否与
int32\u t
在您的硬件/机器上的类型定义有关?

对于
int
使用
%d
,对于
int32\u t
使用
PRId32

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


正如@EricPostpischil所指出的,请注意,
%d
用于带引号的格式字符串内部,而
PRId32
用于外部。原因是,
PRId32
是一个宏,它将扩展为字符串文字,然后进行连接。

类型
int
要求至少有16位值表示,尽管在大多数台式计算机和编译器上它将有32位。因此,
int
通常可能与
int16\u t
int32\u t
int64\u t
相同,或者与上述任何一种都不相同


< >使用<代码> > %d >代码>变量>代码> int >代码>,使用<代码> >“PRID32 < /C> >变量>代码INT32×T/<代码> .< /P>注释C++ C++用户注意这个问题:<代码> %. PRID32 < /C> > C是很好的,但是对于C++ 11,以后你需要一个空间,如<代码>”%“PRID32 ”,或者“<代码> %.”PRId32是一个用户定义的文本,而不是两个单独的标记,这可能会导致编译错误。