准备工作:
struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;
_CRTIMP extern FILE _iob[];
//可见 _iob[]是FILE结构体的实例
具体理解:
#define getchar() getc(stdin)
#define stdin (&_iob[0])//此中的_iob[0]是上面提到的FILE实例中的一个,被操作系统已经初始化好了,用来操作缓存的!
#define getc(_stream) (--(_stream)->_cnt >= 0 \
? 0xff & *(_stream)->_ptr++ : _filbuf(_stream))
// 反斜杠的含义是是连接下一行!!!!!这里实现了getchar()的具体实现
// 存在字符则此宏由此字符返回,不存在则调用_filbuf(&_iob[0])来输入字符到缓冲区,并再次执行getchar()操作.
getchar()函数的功能:执行getchar()时,当缓冲区有字符,则取第一个字符,当缓冲区没有字符,则让用户向缓冲区中输入(以enter或者eof结束),并取其中的第一个字