C语言中putc()的宏实现
我在C中寻找putc()函数的宏实现。
我在Ritchie和Kernighan的“C编程语言”中找到的一个实现
#define putc(x,p) (--(p)->cnt >=0 \ ?(unsigned char) *(p)->ptr++ :_flushbuf((x),p))
文件结构定义如下
typedef struct _iobuf { int cnt; char *ptr; char *base; int flag; int fd; }FILE;
当我们调用putc时,我无法看到cnt是如何初始化的?
它无疑由fopen
初始化,并由读取/写入文件的任何其他内容修改。
它已在代码中初始化:来自K&R
//the stdin stdout,stderr are reserved in first 3 location of_iob[]: FILE _iob[OPEN_MAX]={ {0,(char*)0,(char*)0,_READ,0}, //stdin read with buffered {0,(char*)0,(char*)0,_WRITE,1}, //stdout write with buffered {0,(char*)0,(char*)0,_WRITE|_UNBUF,2}, //stderr write without buffered };