今天我正在学习有关C的标准I / O的事情。当我打开stdio.h文件时发现:
typedef struct _iobuf FILE;
当检查struct _iobuf的定义时发现:
struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
为了了解更多,我已经说明了每一个是否正确
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 */
};
现在我脑子里有两个问题?
问题1:我是否提供了正确的名称以及I / O中的结构如何帮助,如果我添加或删除任何会发生的事情?那会有相应的效果吗?这里提供的顺序是否重要?
Q2:这里没有使用指针,但为什么要使用FILE *打开文件?
答案 0 :(得分:5)
我是否提供了正确的姓名?
这些都是特定于Microsoft实现的内部详细信息,以及未记录的AFAIK。
如果我添加或删除任何会发生的事情?
那真的很糟糕;您可能会导致未定义的行为。
此处没有使用指针,但为什么要使用FILE *打开文件?
因为从应用程序代码的角度来看,实现细节并不重要; FILE *
旨在成为opaque pointer。
答案 1 :(得分:4)
A1。编辑标准标题会导致未定义的行为。
A2。结构通常作为C中的指针传递,以避免复制。此外,它意味着充当句柄或不透明指针。
更大的问题是为什么要做任何你想要的事情。
答案 2 :(得分:0)
回答你的所有问题: