C语言中putc()的宏实现

时间:2012-03-15 04:21:08

标签: c io

我在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如何初始化?

2 个答案:

答案 0 :(得分:5)

毫无疑问,它由fopen初始化,并由读取/写入文件的任何其他内容修改。

答案 1 :(得分:0)

它已在代码中初始化:来自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
                };