%PRId 和 %d 格式字符有什么区别?
What is the difference between the %PRId and %d format characters?
考虑以下代码:
#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
在您的 hardware/machine 上的类型定义有什么关系吗?
int
使用 %d
,int32_t
使用 PRId32
。
也许在您的平台上 int32_t
只是 int
的类型定义,但通常情况下并非如此。
使用错误的说明符会调用未定义的行为,应该避免。
正如@EricPostpischil 指出的那样,请注意 %d
用于带引号的格式字符串内部,而 PRId32
用于外部。这样做的原因是 PRId32
是一个扩展为字符串文字然后连接起来的宏。
类型 int
需要至少有 16 位的值表示,尽管在大多数台式计算机和编译器上它将有 32 位。所以 int
通常可能与上面的 int16_t
、int32_t
、int64_t
或 none 相同。
对int
类型的变量使用"%d"
,对int32_t
.
类型的变量使用"%" PRId32
考虑以下代码:
#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
在您的 hardware/machine 上的类型定义有什么关系吗?
int
使用 %d
,int32_t
使用 PRId32
。
也许在您的平台上 int32_t
只是 int
的类型定义,但通常情况下并非如此。
使用错误的说明符会调用未定义的行为,应该避免。
正如@EricPostpischil 指出的那样,请注意 %d
用于带引号的格式字符串内部,而 PRId32
用于外部。这样做的原因是 PRId32
是一个扩展为字符串文字然后连接起来的宏。
类型 int
需要至少有 16 位的值表示,尽管在大多数台式计算机和编译器上它将有 32 位。所以 int
通常可能与上面的 int16_t
、int32_t
、int64_t
或 none 相同。
对int
类型的变量使用"%d"
,对int32_t
.
"%" PRId32