我要去看看K&R
。我有点困惑以下摘录stdio.h
。stdin,stdout和stderr对标准输入和标准输出的实际调整
typedef struct _iobuf {
int cnt; /* characters left */
char *ptr; /* next character position */
char *base; /* location of buffer */
int flag; /* mode of file access */
int fd; /* file descriptor */
} FILE;
extern FILE _iob[OPEN_MAX];
#define stdin (&_iob[0])
#define stdout (&_iob[1])
#define stderr (&_iob[2])
这里FILE
被定义为一个结构,并且stdin
,stdout
,stderr
是FILE
类型的数组的前三个构件。那么(&_iob[0])
,(&_iob[1])
或(&_iob[2])
到standard input device
和standard output device
的赋值写在哪里呢?
那么你甚至说'FILE'已经在别的地方声明过了吗? – noufal
@noufal你听起来很惊讶。是的,通常它必须在某处被声明才能被使用。你从'fopen()'调用得到的是一个'FILE *',它指向由库以某种方式分配的“FILE”,并填充相关信息。但是这个声明必须由图书馆来完成,而不是应用程序员的业务。 – glglgl