gpt4 book ai didi

C 函数仅定义返回不是预期的?

转载 作者:行者123 更新时间:2023-11-30 19:10:30 26 4
gpt4 key购买 nike

下面的代码尝试了一个简单的操作,将浮点 1.0 与函数 get_number 的返回值进行比较。

我只定义了get_number函数,没有声明,因此函数get_number的返回类型是int而不是double,所以最终输出是0而不是1

但是如果我在 func.h 文件中声明函数 get_number ,它就可以正常工作。

请帮忙或尝试给出一些想法来解释它,提前致谢。

main.c:

#include <stdlib.h>
#include "func.h"

int main() {
printf ("%d\n", 1.0 == get_number(1.0));

return 0;
}

func.c:

double get_number(double n) {
return n;
}

func.h:

#ifndef FUNC_H__
#define FUNC_H__

#endif

输出:

0

注意:
平台:Linux
海湾合作委员会版本:4.8.5

最佳答案

正如其他人已经指出的,省略函数声明不再有效。

但是,当您省略声明时,gcc 只会发出警告。此外,gcc 将假定该函数将返回 int

因此,当您运行程序时,main 中的代码期望该函数返回一个 int,但该函数实际上返回一个 double。换句话说,您的代码读取 float 就好像它是 int 一样。

以下代码说明了当读取 double 时可能发生的情况,就好像它是 int 类型一样:

#include <stdio.h>
#include <string.h>

int main(void) {
double d;
int i;

printf ("---------------------------\n");

d = 1.0; // represented as 0x3ff0000000000000
// ^
// The integer will be 0
memcpy(&i, &d, sizeof(int));
printf ("%d\n", i);

printf ("---------------------------\n");

d = 1.0000000000000002220446049250313080847263336181640625; // represented as 0x3ff0000000000001
// ^
// The integer will be 1
memcpy(&i, &d, sizeof(int));
printf ("%d\n", i);

printf ("---------------------------\n");

d = 1.000000000000000444089209850062616169452667236328125; // represented as 0x3ff0000000000002
// ^
// The integer will be 2
memcpy(&i, &d, sizeof(int));
printf ("%d\n", i);

printf ("---------------------------\n");

return 0;
}

输出:

---------------------------
0
---------------------------
1
---------------------------
2
---------------------------

关于C 函数仅定义返回不是预期的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41164044/

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