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

时间:2016-12-22 20:32:21

标签: 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

如预期的那样?

1 个答案:

答案 0 :(得分:2)

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

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

在这种情况下,然后,函数调用

test(a);

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