Макро-реализация putc () в C - PullRequest
0 голосов
/ 15 марта 2012

Я искал реализацию макроса функции putc () в C.

Одна реализация, которую я нашел в "Языке программирования 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;

Я не вижу, как инициализируется cnt, когда мы вызываем putc?

Ответы [ 2 ]

5 голосов
/ 15 марта 2012

Это, несомненно, инициализируется fopen и модифицируется любым другим, что читает / записывает файл.

0 голосов
/ 12 мая 2016

инициализировано в коде: от 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
                };
...