What does “typedef void (*Something)()” mean

后端 未结 5 470
星月不相逢
星月不相逢 2020-12-02 14:38

I am trying to understand what this means, the code I am looking at has

in .h

typedef void (*MCB)();
static MCB     m_process;

in .

相关标签:
5条回答
  • 2020-12-02 14:49

    Let's take an example

    typedef void (*pt2fn)(int);
    

    Here, we are defining a type pt2fn. Variables of this type point to functions, that take an integer as argument and does not return any value.

    pt2fn kk;
    

    Here, kk is a variable of type pt2fn, which can point to any function that takes in an integer as input and does not return any value.

    Reference:https://cs.nyu.edu/courses/spring12/CSCI-GA.3033-014/Assignment1/function_pointers.html

    0 讨论(0)
  • 2020-12-02 14:52

    It's a function pointer. You get a SEGMENTATION FAULT because you are trying to make a call to a function which address is invalid (NULL).

    According to your specific sample, the function should return no value (void) and should receive no parameters ().

    This should work:

    void a()
    {
        printf("Hello!");
    }
    
    int main(int arcg, char** argv)
    {
        m_process = a;
        m_process(); /* indirect call to "a" function, */
        // Hello!
    }
    

    Function pointers are commonly used for some form of event handling in C. It's not its only use though...

    0 讨论(0)
  • 2020-12-02 15:05

    It defines a pointer-to-function type. The functions return void, and the argument list is unspecified because the question is (currently, but possibly erroneously) tagged C; if it were tagged C++, then the function would take no arguments at all. To make it a function that takes no arguments (in C), you'd use:

    typedef void (*MCB)(void);
    

    This is one of the areas where there is a significant difference between C, which does not - yet - require all functions to be prototyped before being defined or used, and C++, which does.

    0 讨论(0)
  • 2020-12-02 15:09

    It introduces a function pointer type, pointing to a function returning nothing (void), not taking any parameters and naming the new type MCB.

    0 讨论(0)
  • 2020-12-02 15:15

    The typedef defines MCB as the type of a pointer to a function that takes no arguments, and returns void.

    Note that MCB Modes::m_process = NULL; is C++, not C. Also, in C, the typedef should really be typedef void (*MCB)(void);.

    I'm not sure what you mean by "the memory was freed". You have a static pointer to a function; a function cannot be freed. At most, your pointer has been reset somewhere. Just debug with a memory watch on m_process.

    0 讨论(0)
提交回复
热议问题