I am using qsort library function to sort an array of structure elements, while searching on the Internet I found a resource: INFO: Sorting Structures with the C qsort() Functio
Syntax:
typedef int (*compfn) (const void*, const void*);
^ ^ ^ ^ ^
| return type | arguments type
| new type name
defining new type
compfn
is a new user defined type
defined by typedef
keyword,
So, you have exactly typedefded int (*)(const void*, const void*);
to comfn
using the syntax I described above.
A declaration:
compfn fun; // same as: int (*fun) (const void*, const void*);
means fun
is a function pointer that takes two arguments of const void*
types and returns int
.
Suppose you have a function like:
int xyz (const void*, const void*);
then you can assign xyz
address to fun
.
fun = &xyz;
At calling qsort()
:
In expression (compfn)compare
, you are typecasting a function compare
to (compfn)
type function.
A doubt:
shouldn't the call be
(*compfn)
.
No, its type name not function name.
Note: if you just writing int (*compfn) (const void*, const void*);
without typedef then comfn
will be a pointer to a function that returns int
and take two arguments of type const void*