【问题标题】:c function return loses precisionc函数返回失去精度
【发布时间】:2016-09-19 12:10:20
【问题描述】:

我在 file1.c 中有一个名为 dump 的函数。

void dump(unsigned long val, unsigned char raw){

  unsigned long dec = 0;

  dec = hex(val);

}

hex函数在file2.c中

unsigned long hex(unsigned long hex){
   unsigned long result;
...
   return result;

}

由于某种原因,dec 变量只包含 2 个字节的数据。如果我将十六进制函数与转储函数放在同一个文件中,则它包含所有数据。 dec 变量是局部变量,不在其他任何地方使用。 有人知道为什么会这样吗?

如果我将 hex 函数放在 file1.c 中,它会给出正确的输出。所以十六进制函数中的逻辑是有效的。

【问题讨论】:

  • 我们需要查看hex的代码
  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码.没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建最小、完整且可验证的示例。
  • 关于unsigned long hex 的事情告诉我,OP 对数学和计算的几乎所有方面都感到困惑。
  • 我敢打赌,如果你在编译时出现警告,你的编译器会准确地告诉你哪里出了问题。特别是您在 file1.c 中没有十六进制原型。
  • 您在 16 位系统上遇到过这种情况吗?

标签: c function return precision


【解决方案1】:

这可能是一个链接问题,没有从正确的文件中选择hex()。尝试不使用file2.o 进行链接,它应该会抱怨缺少功能。

【讨论】:

  • 也许,只是也许 OP 也没有理解十六进制数字背后的概念
猜你喜欢
  • 1970-01-01
  • 2017-11-04
  • 2012-05-14
  • 2014-01-13
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
  • 2011-03-17
  • 2014-12-09
相关资源
最近更新 更多