无法解释编译器警告

前端之家收集整理的这篇文章主要介绍了无法解释编译器警告前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的编译器( 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的扩展中实质上解决问题.

猜你在找的C&C++相关文章