home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.lang.c      Meh, in C you gotta define EVERYTHING      243,242 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 242,709 of 243,242   
   Michael Sanders to bart   
   Re: function pointer question   
   02 Jan 26 19:44:20   
   
   From: porkchop@invalid.foo   
      
   On Fri, 2 Jan 2026 19:18:56 +0000, bart wrote:   
      
   > On 02/01/2026 07:24, Michael Sanders wrote:   
   >> i have:   
   >>   
   >> void moo(char HISTORY[][64], int hst_len, int invalid, const char *gme_msg)   
   >>   
   >> void mastermind(char HISTORY[][64], int hst_len, int invalid, const char   
   *gme_msg)   
   >>   
   >> to use either i have:   
   >>   
   >> void (*render)(char [][64], int, int, const char *) = MOO ? moo :   
   mastermind;   
   >>   
   >> my multi-part question:   
   >>   
   >> why is void required for the function pointer?   
   >>   
   >> A: because both moo() & mastermind return void?   
   >   
   > Neither return anything. But in C there is no special syntax to denote   
   > routines that don't return values. So a dummy 'void' return type is used.   
   >   
   >>   
   >> B: because every function must have a return type   
   >>     *including function pointers*?   
   >   
   > If you have any function that returns type T (including when T is void   
   > like your examples), then its type is 'function(...)returning T'.   
   >   
   > A pointer to such a function will have a type:   
   >   
   >    'pointer to function(...)returning T'.   
   >   
   > In C syntax, that return type always goes at the start of the   
   > declaration. In your examples,  that will be 'void'.   
   >   
   >> C: what about tyedef?   
   >   
   > Typedefs create convenient aliases for types. So if you created an alias   
   > U for that pointer type in my last example, then you can subsequently   
   > just use U:   
   >   
   >     U p, q, r;   
   >   
   > This declares three variable all with type 'pointer to ... void'. So in   
   > this case the details are hidden, including that void.   
      
   Yes I'm starting to see it now in my mind's eye.   
      
   Especially: 'So a dummy 'void' return type is used.'   
      
   These are superb answers guys =)   
      
   --   
   :wq   
   Mike Sanders   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca