ISO C99
The getc function is equivalent to fgetc, except that if it is implemented as a macro, it
may evaluate stream more than once, so the argument should never be an expression
with side effects.
FreeBSD
The getc() function acts essentially identically to fgetc(), but is a macro that expands in-line.
HP-UX
fgetc Same as getc but is a function rather than a macro. is slower than
but it takes less space per invocation and its name can
be passed as an argument to a function.
所以fgetc是一个函数
getc是一个宏
一般来说宏产生较大的代码,但是避免了函数调用的堆栈操作,所以速度会比较快。
但是也有例外的情况:
1. 很多RISC处理器(如SUN SPARC)使用寄存器窗口重叠技术,
(http://server.chinabyte.com/404/157904_1.shtml),
在寄存器充足的情况下,根本不需要堆栈操作,fgetc函数比getc宏更快
2. 在多线程的情况下,为了线程同步,getc和fgetc可能是相同的。