【问题标题】:What is the difference between the %PRId and %d format characters?%PRId 和 %d 格式字符有什么区别?
【发布时间】:2019-06-13 13:09:46
【问题描述】:

考虑以下代码:

#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 类型有关?

【问题讨论】:

  • 注意这个问题的 C++ 用户:"%"PRId32 在 C 中很好,但对于 C++11 及更高版本,您需要在两者之间留一个空格,例如 "%" PRId32,否则 "%"PRId32 是用户定义的文字而不是两个单独的标记,这可能会导致编译错误。

标签: c printf conversion-specifier length-modifiers


【解决方案1】:

%d 用于int,将PRId32 用于int32_t

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

正如@EricPostpischil 所指出的,%d 在带引号的格式字符串内使用,而PRId32 在外部使用。原因是PRId32 是一个宏,它扩展为字符串文字,然后被连接起来。

【讨论】:

    【解决方案2】:

    int 类型要求至少有 16 位的值表示,尽管在大多数台式计算机和编译器上它将有 32 位。所以int 通常可能与int16_tint32_tint64_t 相同,或者以上都不是。

    int 类型的变量使用"%d",对int32_t 类型的变量使用"%" PRId32

    【讨论】:

      猜你喜欢
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多