gpt4 book ai didi

c - 目标文件中函数的返回值在 C 中发生变化

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

我有以下文件:

f.c:

#include <stdlib.h>

double f(){
return 12345;
}

主.c:

#include <stdlib.h>
#include <stdio.h>
int main(){
double ret = f();
printf("%f\n", ret);
}

我首先使用

将 f.c 编译成目标文件

gcc -c f.c -o f.o

然后使用

将它们组合起来

gcc f.o main.c -o a.out

我期望输出为 12345.000000,但我得到的却是 0.000000。

哪一步出错了?

最佳答案

你编译时没有收到足够多的警告。

因为你没有说:

extern double f(void);

在主程序中,C 编译器被迫假定该函数将返回一个整数。这会破坏结果,因为编译器将 double 的 4 个字节视为 int,然后再次将其转换为 double

您的编译器应该警告您范围内没有原型(prototype),除非您使用的是 C89 编译器而不是 C99 或 C2011 编译器。你应该打开更多的编译器警告,这样你就会被告知这样的错误并且不会遇到这样的问题。

您可以为自己提供一个声明函数 f 的 header ,并将该 header 包含在两个代码模块中。 header 充当中间人,确保定义与用法一致。

关于c - 目标文件中函数的返回值在 C 中发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9678031/

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