Typedef'ing a function

E

Enrico Porreca

Is the following a legal typedef? (gcc -Wall -ansi -pedantic says it's ok)

typedef void Callback(void *obj);

I mean "a Callback is a function taking void * and returning void" (not
"a pointer to function"). Then of course I would use pointers to
Callback, like

void apply(Callback *f, void *a[], size_t size)
{
size_t i;

for (i = 0; i < size; i++)
f(a);
}

I prefer it to

typedef void (*Callback)(void *obj);

because I don't like hiding pointers behind typedefs.
 
S

S.Tobias

Enrico Porreca said:
Is the following a legal typedef? (gcc -Wall -ansi -pedantic says it's ok)
typedef void Callback(void *obj);
I mean "a Callback is a function taking void * and returning void" (not
"a pointer to function"). Then of course I would use pointers to
Callback, like
void apply(Callback *f, void *a[], size_t size)
{
size_t i;
for (i = 0; i < size; i++)
f(a);
}

I prefer it to
typedef void (*Callback)(void *obj);
because I don't like hiding pointers behind typedefs.

Yes (to the typedef) and yes (to its use).

The typedef declaration could be shortened to:
typedef void Callback(void *);
(ie. you don't have to name the parameter).
 
M

Malcolm

S.Tobias said:
The typedef declaration could be shortened to:
typedef void Callback(void *);
(ie. you don't have to name the parameter).
Though normally it is a good idea.

typedef void PixelPutter(int, int, int);
typedef void PixelPutter(int x, int y, int colour);
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top