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