gpt4 book ai didi

无法解释编译器警告

转载 作者:太空狗 更新时间:2023-10-29 16:47:42 25 4
gpt4 key购买 nike

我的编译器 (gcc) 在声明 fp 的行上抛出警告(不是错误!):

int fd = open("filename.dat", O_RDONLY);
FILE* fp = fdopen(fd, "r"); // get a file pointer fp from the file descriptor fd

这些是警告:

main.c: In function ‘main’:
main.c:606: warning: implicit declaration of function ‘fdopen’
main.c:606: warning: initialization makes pointer from integer without a cast

我不理解这些警告,因为 fopen 的返回值是 FILE*。我在这里犯了什么错误?

编辑:我包括stdio.h(我也在Linux上)。

最佳答案

简答:编译时使用-std=gnu99,通常的标准是非POSIX并且没有fdopen


warning: implicit declaration of function ‘fdopen’

意味着您忘记包含 fdopen() 声明所在的头文件。然后编译器会发生隐式声明 - 这意味着未知函数的返回值将是假定为 int - 因此是第二个警告。你必须写

#include <stdio.h>

编辑:如果您正确地包含了 stdio.h,那么 fdopen() 可能在您的目标系统上不可用。你在 Windows 上吗?此函数仅适用于 POSIX。

编辑 2:抱歉,我真的应该意识到这一点。 C99 表示 ANSI C99 标准 - 标准 C 不强制文件描述符的概念以支持非 POSIX 系统,因此它仅提供 fopen()fdopen() 与文件描述符相关,因此它仅适用于 POSIX,因此它不是标准 C99 的一部分。如果您对 GCC 使用 -std=gnu99 开关,它会摆脱标准的限制并允许 POSIX 和 GNU-only 扩展,从根本上解决您的问题。

关于无法解释编译器警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12236124/

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