"Advanced Programming in the UNIX Environment, 3rd Edition", page 151:
The difference between
getc
andfgetc
is thatgetc
can be implemented as a macro, whereasfgetc
cannot be implemented as a macro. This means three things:
- The argument to
getc
should not be an expression with side effects.- Since
fgetc
is guaranteed to be a function, we can take its address. This allows us to pass the address offgetc
as an argument to another function.- Calls to
fgetc
probably take longer than calls togetc
, as it usually takes more time to call a function.
What "expression with side effects" can occur for the function signatures with stream pointer as a parameter?
#include<stdio.h>
int getc(FILE* stream);
int fgetc(FILE* stream);