patterncppCritical
Typedef function pointer?
Viewed 0 times
functiontypedefpointer
Problem
I'm learning how to dynamically load DLL's but what I don't understand is this line
I have a few questions. If someone is able to answer them I would be grateful.
So I'm confused at the moment; can you clarify things for me?
typedef void (*FunctionFunc)();I have a few questions. If someone is able to answer them I would be grateful.
- Why is
typedefused?
- The syntax looks odd; after
voidshould there not be a function name or something? It looks like an anonymous function.
- Is a function pointer created to store the memory address of a function?
So I'm confused at the moment; can you clarify things for me?
Solution
typedef is a language construct that associates a name to a type.You use it the same way you would use the original type, for instance
typedef int myinteger;
typedef char *mystring;
typedef void (*myfunc)();using them like
myinteger i; // is equivalent to int i;
mystring s; // is the same as char *s;
myfunc f; // compile equally as void (*f)();As you can see, you could just replace the typedefed name with its definition given above.
The difficulty lies in the pointer to functions syntax and readability in C and C++, and the
typedef can improve the readability of such declarations. However, the syntax is appropriate, since functions - unlike other simpler types - may have a return value and parameters, thus the sometimes lengthy and complex declaration of a pointer to function.The readability may start to be really tricky with pointers to functions arrays, and some other even more indirect flavors.
To answer your three questions
-
Why is typedef used?
To ease the reading of the code - especially for pointers to functions, or structure names.
-
The syntax looks odd (in the pointer to function declaration)
That syntax is not obvious to read, at least when beginning. Using a
typedef declaration instead eases the reading-
Is a function pointer created to store the memory address of a function?
Yes, a function pointer stores the address of a function. This has nothing to do with the
typedef construct which only ease the writing/reading of a program ; the compiler just expands the typedef definition before compiling the actual code.Example:
typedef int (*t_somefunc)(int,int);
int product(int u, int v) {
return u*v;
}
t_somefunc afunc = &product;
...
int x2 = (*afunc)(123, 456); // call product() to calculate 123*456Code Snippets
typedef int myinteger;
typedef char *mystring;
typedef void (*myfunc)();myinteger i; // is equivalent to int i;
mystring s; // is the same as char *s;
myfunc f; // compile equally as void (*f)();typedef int (*t_somefunc)(int,int);
int product(int u, int v) {
return u*v;
}
t_somefunc afunc = &product;
...
int x2 = (*afunc)(123, 456); // call product() to calculate 123*456Context
Stack Overflow Q#4295432, score: 602
Revisions (0)
No revisions yet.