【问题标题】:Printf long long int in C with GCC?使用 GCC 的 C 语言中的 Printf long long int?
【发布时间】:2012-11-15 10:59:16
【问题描述】:

如何使用 GCC 在 C99 中 printf long long intunsigned long long int

我搜索了其他建议使用%lld 的帖子,但它给出了以下警告:

警告#1:格式为 [-Wformat]|
的未知转换类型字符“l” 警告#2:格式参数过多 [-Wformat-extra-args]|

对于以下尝试:

#include <stdio.h>

int main()
{
   long long int x = 0;
   unsigned long long int y = 0;
   printf("%lld\n", x);
   printf("%llu\n", y);
}

【问题讨论】:

  • 你在编译时是否使用了-std=c99标志?
  • 我没有收到任何警告:i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1(基于 Apple Inc. build 5658)(LLVM build 2335.15.00)
  • @netcoder:我不确定如何查找版本。我在 Windows x86 上运行 gcc。
  • 啊,它是 gcc 版本 4.6.1。谢谢@effeffe。
  • 您使用的是哪个版本的 Windows?

标签: c gcc printf c99


【解决方案1】:

对于可移植代码,可以使用inttypes.h 中的宏。它们扩展到平台的正确的。

例如对于 64 位整数,可以使用宏 PRId64

int64_t n = 7;
printf("n is %" PRId64 "\n", n);

【讨论】:

    【解决方案2】:

    你可以试试code::block的设置,有编译器...,然后在C模式下选择。

    【讨论】:

      【解决方案3】:

      如果您在 Windows 上并使用 mingw,gcc 使用 win32 运行时,其中 printf 需要 %I64d 用于 64 位整数。 (和%I64u 为一个无符号的 64 位整数)

      对于大多数其他平台,您可以使用 %lld 打印 long long。 (和%llu,如果它没有签名)。这是在 C99 中标准化的。

      gcc 不附带完整的 C 运行时,它依赖于运行它的平台 - 所以一般情况是您需要查阅特定平台的文档 - 独立于 gcc。

      【讨论】:

      • 我也同意你和版主的意见,但 SO 并不真正适用于这种类型的线程......在这里保留你的评论可能会变得混乱。
      • 那么,这是在 Windows 中执行此操作的非标准方式吗?我可以知道任何其他编译器完全支持并遵循 Windows x86 的标准规则吗?
      • 警告:不要将 "%I64d" 中的大写 "i" 与小写 L 混淆。我只是犯了那个错误。
      • 可能值得注意的是,定义__USE_MINGW_ANSI_STDIO=1 将使mingw 使用标准stdio。这也很有用,因为 windows 的 printf 不理解 %n。
      • 请注意,现代 Windows(Windows XP 之后)的 msvcrt 确实支持 %lld %llX。为了使程序始终如一地工作,您可以使用@Shahbaz 提到的方法,这样您就不必使用那种奇怪的%I64d 东西。
      【解决方案4】:

      尝试更新您的编译器,我在带有 MinGW 的 Windows 7 Starter x86 上使用 GCC 4.7,它在 C99 和 C11 中使用相同的选项编译得很好。

      【讨论】:

      • 能否为 GCC 4.7 版本添加更改日志的链接?
      • @user963241: 嗯,找不到任何东西...gcc.gnu.org/gcc-4.7 可能是关于 MinGW,但我目前无法访问他们的网站。
      • 最新的 GCC 4.7 编译器是否与 MinGW 一起提供?我刚刚尝试下载并安装 MinGW,但它没有将我的编译器更新到 4.7 版。
      • 我有,所以是的。也许你还在使用旧版本。
      • 我认为可能是我使用的是旧版本的 Windows 而不是编译器。无论如何,我会尝试使用最新的编译器。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      • 2021-02-09
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多