【问题标题】:Avoiding floating point warning避免浮点警告
【发布时间】:2014-05-23 08:33:07
【问题描述】:

我正在使用 avr studio 4 对 ATmega128 进行编程。当我显示浮点值时,我收到警告消息,上面写着

导致出现警告消息的行如下:

float temperature;
//{other parts}
fprintf(stderr,"Temp: %0.2f ", temperature);

警告信息是:

../main.c:128:2: warning: format '%f' expects argument of type 'double', but argument 4 has type 'float' [-Wformat]"

当以双倍显示时,我看到其他随机值..我怎样才能摆脱这个警告消息?

【问题讨论】:

  • 请发布一些代码或至少是导致错误的行 (../main.c:128:2) 以及您获得的和您期望的输出值。
  • 这有帮助吗? stackoverflow.com/questions/6395726/… -- 我建议明确转换为 double (这与 avr-gcc 中的 float 相同),看看是否有区别。
  • @Rev1.0 - 我已经粘贴了我的代码中的行。使用上面显示的声明时,温度传感器的输出读数与预期的一样,但我收到警告消息,期望双值。我想摆脱这个。
  • @Hanno Binder - 我浏览了你提供的链接。我的理解是,当使用 printf 时,float 参数被转换为 double。由于我不必处理 double 之前我不关心它。但我有一个简单的问题。如果大小无关紧要,我可以在 avr-gcc 中使用 double 而不是 float。 avr-gcc 是否以同样的方式处理 float 和 double ?
  • 好吧,无论如何,temperature 都应该被隐式提升为double。 “当以双倍显示时,我看到其他随机值”到底是什么意思。您的意思是当您显式转换为 double 时,显示的值是错误的?我不明白为什么会这样。

标签: avr floating


【解决方案1】:

我做了一些进一步的挖掘,警告是/实际上是 AVRGCC 的一个错误。它是marked as resolved in GCC v4.1.0,但从 cmets 来看,它没有得到正确修复。 another fix 于 2013 年 8 月 26 日 16:52:19 UTC 有可能解决了问题。

似乎 floatdouble 的促销活动无法正常工作,因为 GCC 代码为这两种类型假定了两种不同的大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    相关资源
    最近更新 更多