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是一个用户定义的文本,而不是两个单独的标记,这可能会导致编译错误。