gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:41:40 25 4
gpt4 key购买 nike

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

最佳答案

调用前需要为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 的构建命令或将 /W4/Wx 添加到 MSVC 来执行此操作。

请注意,如果将 int 传递给 func,则会返回正确的值。据推测,这可能是因为调用代码不知道它需要将参数转换为 int 并改为传递 floatfunc 然后读取 floats 未复制到的寄存器/堆栈位置或接收 float 参数的位表示并将它们视为 整数。其中任何一个都会导致接收到不正确的 ab 值。您可以通过在 func 中添加一个 printf 来自己检查它,以记录其参数的值。

关于c - 将浮点值传递给接受整数参数的函数时的垃圾值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16962039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com