我有一个用于编译为*.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/

10-11 03:38