C語言中,函數(shù)參數(shù)或者返回值中如果包含指針指向動(dòng)態(tài)分配的內(nèi)存區(qū)域,那么管理申請(qǐng)和釋放就顯得十分麻煩,一不小心就容易出錯(cuò),今天突發(fā)奇想借鑒高級(jí)語言函數(shù)式編程的思想,其實(shí)C語言里的函數(shù)指針已經(jīng)非常完美了,如果這樣寫,管理起來就會(huì)很方便,callback中無需關(guān)注buffer的釋放。
07 |
void callback( const char *
buffer, int
len) {
|
09 |
for (i =
0; i < len; i++) { |
15 |
void foo( void (*
callback)( const
char *, int )) {
|
17 |
buffer = ( char *) malloc (100); |
18 |
memset (buffer, 0, 100); |
19 |
strcpy (buffer, "Hello, World!" ); |
20 |
callback(( const char *)buffer, strlen (buffer)); |
因?yàn)?amp;callback == callback
void foo()可以寫成這樣比較清晰
typedef void (* callbackPtr)(...) ;
void foo(callbackPtr cb)()
{
if (!cb) return; //還可以檢查空值
...
cb(...);
...
}
這種寫法在win32里很常見,如CreateThread()就用到
|