为什么我们使用FILE*代替FILE进行I/O.

2 c gcc cross-platform c99 visual-c++

今天我正在学习有关C的标准I/O的事情.当我打开stdio.h文件时发现:

typedef struct _iobuf FILE;
Run Code Online (Sandbox Code Playgroud)

当检查struct _iobuf的定义时发现:

struct _iobuf {
    char *_ptr;
    int   _cnt;
    char *_base;
    int   _flag;
    int   _file;
    int   _charbuf;
    int   _bufsiz;
    char *_tmpfname;
};
Run Code Online (Sandbox Code Playgroud)

为了更多地了解,我已经给出了关于每一个的描述,不论它是否正确

struct _iobuf {
    char *_ptr;      /* next character position */
    int   _cnt;      /* characters left */
    char *_base;     /* location of buffer */
    int   _flag;     /* File status flags */
    int   _file;
    int   _charbuf;   /*Data transfer buffer */
    int   _bufsiz;    /* Buffer size */
    char *_tmpfname;  /* Temporary file indicator */
};
Run Code Online (Sandbox Code Playgroud)

现在有两个问题在我脑海里?

问题1:我是否提供了正确的名称以及I/O中的结构如何帮助,如果我添加或删除任何事情会发生什么?那会有相应的效果吗?这里提供的顺序是否重要?

Q2:这里没有使用指针,但为什么要使用FILE*打开文件?

Oli*_*rth 5

我提供了正确的名字吗?

这些都是特定于Microsoft实现的内部详细信息,以及未记录的AFAIK.

如果我添加或删除任何事情会发生什么?

那真的很糟糕; 你可能会导致未定义的行为.

这里没有使用指针,但为什么使用FILE*打开文件?

因为从应用程序代码的角度来看,实现细节并不重要; FILE *意图是一个不透明的指针.