我有一个行为不正确的c函数,我从来没有见过这样的东西也许有人可以启发我这个完整的谜团
所以在test.c中,函数是:
float wtf(int c)
{
return 0.0;
}
在main.c中
float a=wtf(0);
float b=wtf(2);
float c=wtf(3);
float d=wtf(4);
printf("%f %f %f %f\n",a,b,c,d);
结果:
0.000000 2.000000 3.000000 4.000000
现在为什么参数以某种方式输出应该输出0的函数?
这是我在linux下编译它的方法
cc -std=c99 -I"/usr/include/pd" -DPD -DVERSION='"0.0"' -fPIC -O6 -funroll-loops -fomit-frame-pointer -Wall -W -g -o "main.o" -c "main.c" -lpng -lbcm2835 -Wno-unused-parameter -Wno-implicit-function-declaration -Wno-unused-variable -Wno-unused-but-set-variable -Wno-comment -lc
有人可以帮帮我吗?
问候
答案 0 :(得分:4)
您似乎错过了编译器的-Wall
参数。有了它,你会看到如下信息:
main.c:3:1: warning: implicit declaration of function ‘wtf’ [-Wimplicit-function-declaration]
哪种排序告诉你问题 - 如果你在尝试调用它之前没有在编译单元中声明一个函数,编译器将假定它返回int
- 并且在这种情况下,看起来int
返回值恰好存储在与第一个参数相同的位置(可能是某个特定的整数寄存器)。因此,如果获得函数实际尝试返回的返回值(可能在浮点寄存器中),它会将int
转换为浮动,如您所见。