I would like to declare a variable of type pointer to function returning pointer to function. Essentially what the following does, but without any typedef
s
You can have a look at the declaration of signal()
which is a function taking a void(*)()
and returning one of those. The variable ptr
can be declared like this:
void (*(*ptr)())()
The notation is a bit awkward and clearly inside out. It may be easier to use trailing return types:
auto (*ptr)() -> void (*)()
... or, of course, use trailing return types all the way through:
auto (*ptr)() -> auto (*)() -> void
The general rule of C (and C++) declarations is: if you type the declaration as an expression, it will have the declaration's type.
So, you want a pointer to function which returns pointer to function returning void.
Let's say we have such a pointer, ptr
. How to get void
out of it?
Dereference ptr
, getting a function returning pointer to function returning void: *ptr
Call the function, getting a pointer to function returning void: (*ptr)()
Dereference that pointer, getting a function returning void: *(*ptr)()
Call that function, getting void: (*(*ptr)())()
Now just turn this into a declaration:
void (*(*ptr)())();
P.S. I know other have answered in the meantime (and I've upvoted). But I wanted to show the generic process to arrive at the declaration form.