getc与fgetc

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可能是相同的。

你可能感兴趣的:(get)