“UNIX 环境中的高级编程,第 3 版”,第 151 页:
getc
和之间的区别在于fgetc
可以getc
实现为宏,而fgetc
不能实现为宏。这意味着三件事:
- to 的参数
getc
不应是具有副作用的表达式。- 既然
fgetc
保证是一个函数,我们就可以取它的地址。这允许我们将地址fgetc
作为参数传递给另一个函数。- 调用 to
fgetc
可能比调用 需要更长的getc
时间,因为调用函数通常需要更多时间。
以流指针为参数的函数签名会出现什么“具有副作用的表达式” ?
#include<stdio.h>
int getc(FILE* stream);
int fgetc(FILE* stream);