将浮点值传递给接受整数参数的函数时的垃圾值
#include int main(){ int ret = 0; ret = func(1.0,2.0); printf("\n ret : %d \n",ret); return 0; } func(int a,int b){ float m = 5.0; float n = 6.0; int sum = m + n; printf("\n sum : %d \n",sum); return a+b; }
EDITED
总和:11
ret:-877505847
为什么传递给整数的浮点值抛出一个垃圾值,而浮点值添加并赋值给函数内的整数给出正确的值11?
您需要在调用之前为func
提供声明
int func(int a,int b); int main() { } int func(int a,int b) { // implementation }
你的代码可能会被警告编译,例如warning: implicit declaration of function 'func'
。 如果您已修复此警告,则您还修复了错误。
让编译器警告你尽可能多的潜在问题是一个好习惯。 您可能还希望通过将其视为错误来防止错过警告的可能性。 您可以通过将-Wall -Werror
添加到gcc的构建命令或MSVC的/W4 /Wx
来实现此目的。
请注意,如果将int
传递给func
则返回正确的值。 猜测,这可能是因为调用代码不知道它需要将参数强制转换为int
并传递float
。 func
然后读取floats
未被复制到的寄存器/堆栈位置或接收float
参数的位表示并将它们视为int
。 这些中的任何一个都将导致接收到a
, b
不正确值。 您可以通过在func
添加printf
来记录其参数的值来自行检查。