0
#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

回复:-877505847

为什么传递给整数的浮点值会抛出垃圾值,而在函数内部添加并分配给整数的浮点值会给出正确的值 11 ?

4

1 回答 1

6

您需要func在调用之前提供声明

int func(int a,int b);
int main() {
}
int func(int a,int b) {
    // implementation
}

您的代码可能编译时带有类似warning: implicit declaration of function 'func'. 如果你修复了这个警告,你也修复了错误。

让编译器尽可能多地警告您潜在的问题是一个好习惯。您可能还希望通过将它们视为错误来防止丢失警告的可能性。您可以通过将gcc 或MSVC添加-Wall -Werror到您的构建命令中来做到这一点。/W4 /Wx

请注意,如果您将ints传递给 ,则会返回正确的值func。猜测一下,这可能是因为调用代码不知道它需要将参数转换为int并传递floatfunc然后要么读取floats未复制到的寄存器/堆栈位置,要么接收参数的位表示float并将它们视为int. 这些中的任何一个都将导致接收到不正确的a,值b。您可以自己检查这一点,方法是添加一个printf内部func来记下其参数的值。

于 2013-06-06T12:28:52.943 回答