typedef a function pointer type

后端 未结 2 522
轻奢々
轻奢々 2021-01-03 08:14

I want to declare a pointer type which point to a function, so I try:

typedef void (*print)(void); works perfect

void (*print)(void);

相关标签:
2条回答
  • 2021-01-03 08:41
    1. No, you don't have to use a typedef to create an object of type 'pointer to function':

      void somefunc(void (*pointer)(void))
      {
          (*pointer)();
          pointer();
      }
      

      However, there is no way to create a name for a type other than by using a typedef. I suppose you could indulge in macro hackery to generate a 'pointer to function', but after the macro is expanded, you'd have a 'pointer to function' written out:

      #define PTR_FUNC(func) void (*func)(void)
      void somefunc(PTR_FUNC(pointer)) { ... }
      
    2. The (void) notation as the type name is wrong. You don''t write: (int) x; and expect to declare a variable x -— it is a type cast. Same with the notation you're using in your typedef.

    3. You can't write typedef void (*)(void) Print; because it is not an allowed C syntax. You also can't write typedef [32] int name; either — it isn't valid C syntax.

    0 讨论(0)
  • 2021-01-03 08:54

    The correct way is:

    typedef void (*print_function_ptr)(void)
    

    and its usage for variable/parameter declaration is:

    print_function_ptr p;
    
    1. You don't need a typedef to declare a variable. You can directly write void (*p)(void) to declare a variable p pointing to a function taking void and returning void. However to declare a type alias / name for a pointer to function, typedef is the tool.

    2. It does not mean anything it is not a valid C syntax.

    3. Because it is not how C works. Typedefs in C mimics how variables are declared or defined.

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