I m trying to figure out what the following code in C does?
((void(*)())buf)();
where buf is a char
array.
I m trying to figure out what the following code in C does?
((void(*)())buf)();
where buf is a char
array.
Let s take it one step at a time.
void(*)()
This is a pointer to a function that takes unspecified arguments and has no return value.
(void(*)())buf
simply casts buf to this function pointer type. Finally,
((void(*)())buf)();
calls this function.
So the entire statement is "interpret buf
as a pointer to a void
function without arguments, and call that function."
It casts buf
to a function pointer of type void(*)()
(A function returning nothing/void and taking unspecified arguments) and calls it.
The ANSI standard does not really allow the casting of normal data pointers to function pointers, but your platform may allow it.
I tend to use the "cdecl" command when I come across a mind boggling declaration. Example:
[me@machine]$ cdecl
Type `help or `? for help
cdecl> explain (void(*)())buf
cast buf into pointer to function returning void
Although there are cases where I do wish that there s a tool out there that explains the output of "cdecl" :/
This casts buf
to the type void (*)()
, a pointer to a function that takes unspecified parameters and returns nothing. Then it calls the function at that address (the two rightmost parentheses).
((void(*)())buf)(); ------------/ cast `buf` to ---------/ type: pointer to function accepting a fixed but unspecified number of arguments and returning void ----------------/ and call that "function"
It casts buf
into a function pointer, that takes unspecified arguments, and calls it.
I would guess that in many circumstances, it crashes the machine. Otherwise, it treats the array as a pointer to a function that returns void and invokes it.
You might find "expert c programming" a good read - unpacking this kind of thing is in one of the chapters, if I remember right. It s a long time since I read it, but I remember thinking it was worth the effort at the time. http://www.amazon.com/Expert-Programming-Peter-van-Linden/dp/0131774298
There is an online version of the cdecl tool that lsc mentioned that you might find useful : http://www.cdecl.org/
calls a function pointer. the function has no arguments.
For example, let s say I want to find a particular word or number in a file. The contents are in sorted order (obviously). Since I want to run a binary search on the file, it seems like a real waste ...
最好、最小、最快、开放的来源、C/C++ 3d 提供方(在3ds max模型的支持下),而不是通用公平市价,
Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...
I m trying to find the source of a bug I have found in an open-source application. I have managed to get a build up and running on my Windows machine, but I m having trouble finding the spot in the ...
I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...
I was wondering if there were any good free graphics libraries for C that are easy to use? It s for plotting 2d and 3d graphs and then saving to a file. It s on a Linux system and there s no gnuplot ...
Is there anything other than DDD that will draw diagrams of my data structures like DDD does that runs on Linux? ddd is okay and runs, just kind of has an old klunky feeling to it, just wanted to ...
Please note that this is not homework and i did search before starting this new thread. I got Store an int in a char array? I was looking for an answer but didn t get any satisfactory answer in the ...