【问题标题】:Format specifier for 'long long''long long' 的格式说明符
【发布时间】:2009-01-20 17:52:17
【问题描述】:

我将 64 位计数器的变量声明为:

long long call_count;

我应该在打印语句中使用什么格式说明符?

我试过了,%l%ld%ll。似乎没有一个是正确的。

我使用 Diab C 编译器来编译我的应用程序代码以在 pSOS 操作系统上运行。

【问题讨论】:

    标签: c


    【解决方案1】:

    根据 C99,它应该是“%lld”(例如,参见here)。如果 Diab C 不是 C99,那么您必须查看编译器文档,我似乎无法通过快速谷歌搜索在线找到该文档。

    【讨论】:

    • 对于 'long long unsigned int' 你应该使用 "%llu"
    【解决方案2】:

    它是"%lli"(或等效的"%lld"

    【讨论】:

      【解决方案3】:

      Microsoft 和 Watcom 使用 %I64d(大写的眼睛),其他使用 %lld(小写的 ell ell)。

      【讨论】:

      • “使用 %I64d(大写 I)”:再试一次?
      • 微软长期使用ll(ell ell); __int64 的 I64(眼睛)。 msdn.microsoft.com/en-us/library/tcxf1dw6.aspx
      • 格式说明符在fixed width 中的歧义较少(前提是使用了合理的固定宽度字体)。
      【解决方案4】:

      这里已经描述了这一点,甚至更多: cross-platform printing of 64-bit integers with printf

      TL;DR: 您可以使用 PRId64 宏(来自 inttypes.h)以半可移植的方式打印十进制的 64 位整数。还有其他宏(如 PRIx64)。

      【讨论】:

        【解决方案5】:

        也许%lld?我认为这是gcc的格式,对Diab C编译器一无所知。

        【讨论】:

        • %lld 是长期标准转换说明符,Windows 是我所知道的唯一不支持此功能的说明符(但它们不支持很多标准)。此外,这是特定于正在使用的标准 c 库,而不是编译器。
        【解决方案6】:

        有符号是 %lld,无符号是 %llu

        【讨论】:

          【解决方案7】:
          long long t1;             //signed
          unsigned long long t2;    //unsigned
          
          printf("%lld",t1);
          printf("%llu",t2);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-08-22
            • 2020-10-03
            • 1970-01-01
            • 1970-01-01
            • 2011-02-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多