这是我的问题:我有两个文件,其中一个包含我的 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/