「高級編程UNIX環境,第三版」,第151頁:如何將「有副作用的表達式」傳遞給getc?
getc
和fgetc
之間的區別是getc
可以實現 宏,而fgetc
不能作爲宏來實現。這意味着 三件事:
- 到
getc
的參數不應該副作用的表達式。- 由於
fgetc
保證是一個函數,我們可以採取它的地址。這允許我們將fgetc
的地址作爲參數傳遞給另一個 函數。- 撥打電話
fgetc
可能比撥打getc
需要更長的時間,因爲通常需要更多時間來調用某個功能。
什麼「副作用表達」可以發生用於與流指針作爲參數函數簽名?
#include<stdio.h>
int getc(FILE* stream);
int fgetc(FILE* stream);
例如'CH = GETC(filePointerArray [++ I])'' – BLUEPIXY
GETC(FOO())'其中'FILE * foo的(){/ *副作用* /}'。 'getc(strptr ++)'其中'FILE * strptr'。 'getc(* pstrptr ++)'其中'FILE ** pstrptr'。等等。拿出例子很容易。 –
謝謝,BLUEPIXY,Jim Balter。 –