c - 浮点值与另一个翻译单元中使用的函数不同

标签 c floating-point function-call

这是我的问题:我有两个文件,其中一个包含我的 main() :

int main()
{
  float a;

  a = 90;
  test(a);
}

另一个包含 test() 函数:

float test(float a)
{
  printf("a : %f\n", a);
}

因此,我编译这些文件 (gcc test.c main.c) 并执行二进制文件。

但是为什么输出是

a : 0.0000

而不是

a : 90.0000

如预期吗?

最佳答案

comments below the actual post 中所述,缺少向使用该函数的所有不同翻译单元提供函数的正确签名(前向声明/原型(prototype))将导致回退到签名为

的函数
  • 返回一个int(在最新标准中已废弃)
  • 接受任意数量的参数而不进行类型检查。

在这种情况下,那么,函数调用

test(a);

将被解释为对函数的调用,返回 int 并传递一个 int 参数,该参数实际上不匹配(预期的 int 和实际的 float 类型),导致 undefined behavior ,产生无用的结果。

关于c - 浮点值与另一个翻译单元中使用的函数不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41291240/

相关文章:

c - 如何比较给定角度的两点?

c++ - 错误LNK2019。 Unresolved external 。请教我我搞砸了什么。

java - 当你需要使用 float 时如何真正避免浮点错误?

java - Java 编译器的文本到浮点值转换与 strtod 有何不同?

c - 在 ARM C 调用约定中要保存哪些寄存器?

c - 线程打开套接字

c - C 中的合并排序编译,但不排序

c++ - 如何避免显示浮点: -0. 0

c++ - 这个函数调用会被g++优化吗?

python - 使方法返回 'self' 以链接方法调用是否好?