我有一个用于编译为*.o
文件的程序版本,但现在没有,并且给出了编译器错误。
我试图在Linux上使用gcc编译器编译我的代码,但编译失败。
#include <stdio.h>
int isatty();
long isatty_(lio_number)
long *lio_number;
{
int file_desc;
if ((*lio_number)==5)
{
file_desc = stdin->_file;
return isatty(file_desc);
}
else
return 0;
}
我希望
gcc -c isatty.c
命令产生isatty.o
,但不会。相反,我收到此消息:isatty.c: In function ‘isatty_’:
isatty.c:11: error: ‘struct _IO_FILE’ has no member named ‘_file’
最佳答案
切勿使用FILE
结构的任何成员。
使用fileno(stdin)
而不是stdin->_file
。
成员_file
是文件描述符的MinGW特定名称,而fileno
是广泛支持的POSIX兼容功能。
除此之外,您可能需要#include <unistd.h>
而不是显式定义isatty
。
如果由于某种原因仅限于以这种方式编写代码,请不要期望它具有可移植性。否则,这应该起作用:
#include <stdio.h>
#include <unistd.h>
long isatty_(long *lio_number)
{
int file_desc;
if (*lio_number == 5)
{
file_desc = fileno(stdin);
return isatty(file_desc);
}
else
{
return 0;
}
}
所做的更改是,它包括
unistd.h
,该声明提供isatty
的声明,它包括函数定义中的参数类型,并且它使用fileno(stdin)
而不是stdin->_file
,后者更易于移植。它还可以改善格式设置,以便其他人可以根据需要读取您的代码。关于c - 如何修复 “'结构_IO_FILE'没有名为 '_file'的成员?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56569115/