将浮点值传递给接受整数参数的函数时的垃圾值

时间:2013-06-06 12:25:45

标签: c

#include<stdio.h>
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;
}

已编辑

总和:11

ret:-877505847

为什么传递给整数的浮点值抛出一个垃圾值,而浮点值被添加并赋值给函数内的整数给出正确的值11?

1 个答案:

答案 0 :(得分:6)

您需要在调用之前为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并传递floatfunc然后读取floats未复制到的寄存器/堆栈位置或接收float个参数的位表示,并将它们视为int。这些都会导致收到ab的值不正确。您可以通过在printf内添加func来自行检查,以记下其参数的值。