dua en la macro #define getc(p) del stdio.h
Publicado por ruben (4 intervenciones) el 14/12/2007 00:56:30
Hola estoy estudiando la biblioteca estandar de e/s de c, y en el stdio.h del manual
que sigo me encuentro con la siguiente macro
#define getc(p) (--(p)->cnt >=0 ? (unsigned char) *(p)->ptr++ : fillbuf(p))
p es una estructura de tipo FILE, con los siguientes atributos:
int cnt ;//caracteres que quedan en la memoria intermedia
char *ptr;//puntero al caracter siguiente de la memoria intermedia
char *base;//puntero al inicio de la memoria intermedia
int flag;//modo de acceso al fichero y estado del mismo
int fd;//descriptor del fichero al que queremos acceder
Bueno, mi duda es que no entiendo la logica de la macro, porque si p->cnt son los caracteres que
quedan en el buffer, estos siempre van a ser o 0, o mas de 0, por lo que la primera condicion del if
siempre se cumpliria, y siempre devolveria ese puntero a p->ptr++.
¿Alguien me puede explicar en que casos (p)->cnt es menor de 0 y por lo tanto se realiza la
llamada a fillbuf(p) ?
Muchas gracias.
que sigo me encuentro con la siguiente macro
#define getc(p) (--(p)->cnt >=0 ? (unsigned char) *(p)->ptr++ : fillbuf(p))
p es una estructura de tipo FILE, con los siguientes atributos:
int cnt ;//caracteres que quedan en la memoria intermedia
char *ptr;//puntero al caracter siguiente de la memoria intermedia
char *base;//puntero al inicio de la memoria intermedia
int flag;//modo de acceso al fichero y estado del mismo
int fd;//descriptor del fichero al que queremos acceder
Bueno, mi duda es que no entiendo la logica de la macro, porque si p->cnt son los caracteres que
quedan en el buffer, estos siempre van a ser o 0, o mas de 0, por lo que la primera condicion del if
siempre se cumpliria, y siempre devolveria ese puntero a p->ptr++.
¿Alguien me puede explicar en que casos (p)->cnt es menor de 0 y por lo tanto se realiza la
llamada a fillbuf(p) ?
Muchas gracias.
Valora esta pregunta


0