加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

无法解释编译器警告

发布时间:2020-12-16 03:44:04 所属栏目:百科 来源:网络整理
导读:我的编译器( 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: impl
我的编译器( 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的扩展中实质上解决问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读