Just wondered will it work or not. It works.
Do not try this on platforms other then 32bit x86.
#include <stdio.h>
void f() { printf("hello, world\n"); }
char prog[6];
typedef void (*callable)();
int main() {
prog[0] = 0xe8;
*(int *)(prog+1) = ((char *)f)-((char *)(prog+5));
prog[5] = 0xc3;
((callable)prog)();
}