「UNIX 環境での高度なプログラミング、第 3 版」、151 ページ:
getcとの違いはfgetc、マクロとして実装できるgetcのに対し、 はマクロfgetcとして実装できないことです。これは、次の 3 つのことを意味します。
- への引数は、副作用のある式であって
getcはなりません。fgetc関数であることが保証されているため、そのアドレスを取得できます。これにより、 のアドレスをfgetc引数として別の関数に渡すことができます。- 関数の呼び出しには通常より時間がかかるため、 への呼び出しは への呼び出し
fgetcよりもおそらく時間がかかります。getc
ストリーム ポインターをパラメーターとして使用する関数シグネチャに対して、どのような「副作用のある式」が発生する可能性がありますか?
#include<stdio.h>
int getc(FILE* stream);
int fgetc(FILE* stream);