id f(char* v,int sz) { //error,as qsort is style of C //but compare is style of C++(www.cppentry.com) qsort(v,sz,1,&compare); qsort(v,sz,1,&ccomp);//ok isort(v,sz,1,&compare);//ok //error,as isort is style of C++(www.cppentry.com) //but ccomp is style of C isort(v,sz,1,&ccopm); }
*
,const void*);//style of C++(www.cppentry.com)
const void*,const void*);//style of C
void*
p,size_t n,size_t sz,CFT cmp);//style of C
size_t n,size_t sz,FT cmp);//style of C++(www.cppentry.com)
size_t n,size_t sz,CFT cmp);//style of C
void*
p,size_t n,size_t sz,FT cmp);
*,const void*);//style of C++(www.cppentry.com)
void*,const void*);//style of C
int sz)
| 19 |
| //error,as qsort is style of C
| 20 |
| //but compare is style of C++(www.cppentry.com)
| 21 |
| qsort(v,sz,1,&compare);
| 24 |
| isort(v,sz,1,&compare);//ok
| 25 |
| //error,as isort is style of C++(www.cppentry.com)
| 26 |
| //but ccomp is style of C
注意:typedef int (*FT) (const void* ,const
void*),表示定义了一个函数指针的别名FT,这种函数指针指向的函数有这样的特征:返回值为int型、有两个参数,参数类型可以为任意类型的指针(因为为void*)。
最典型的函数指针的别名的例子是,信号处理函数signal,它的定义如下:
| 1 |
typedef | void (*HANDLER)( int );
,HANDLER);
上面的代码定义了信函处理函数signal,它的返回值类型为HANDLER,有两个参数分别为int、HANDLER。
这样避免了要这样定义signal函数:
void(*)(int)
))(int)
比较之后可以明显的体会到typedef的好处。 |