这是我的问题:我有两个文件,一个包含我的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
如预期的那样?
答案 0 :(得分:2)
正如comments below the actual post中所提到的,缺少为使用该函数的所有不同翻译单元提供函数的正确签名(前向声明/原型)将导致后备到带有
签名的函数int
(最新标准已废弃)在这种情况下,然后,函数调用
test(a);
将被解释为对函数的调用,返回int
并传递一个int
参数,该参数实际上是不匹配(预期int
和实际float
类型),导致undefined behavior,产生未完成的结果。