C语言中,函数参数或者返回值中如果包含指针指向动态分配的内存区域,那么管理申请和释放就显得十分麻烦,一不小心就容易出错,今天突发奇想借鉴高级语言函数式编程的思想,其实C语言里的函数指针已经非常完美了,如果这样写,管理起来就会很方便,callback中无需关注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)); |
因为&callback == callback
void foo()可以写成这样比较清晰
typedef void (* callbackPtr)(...) ;
void foo(callbackPtr cb)()
{
if (!cb) return; //还可以检查空值
...
cb(...);
...
}
这种写法在win32里很常见,如CreateThread()就用到
|