Explain typedef for function used in qsort library

前端 未结 3 1529
佛祖请我去吃肉
佛祖请我去吃肉 2021-01-22 19:27

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

3条回答
  •  借酒劲吻你
    2021-01-22 19:46

    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*

提交回复
热议问题