#include <stdio.h>

typedef int (*Fn)();

int poop1(Fn, int);
int poop2(Fn, int);

int main(int argc, char *argv[])
{
    poop1(poop2,5);
    return 0;
}

int poop1(Fn fn, int i)
{
    printf("this is poop1, fn = %08x, i = %d\n", (unsigned int) fn, i);
    return fn?fn(NULL, i):i;
}

int poop2(Fn fn, int i)
{
    printf("this is poop2, fn = %08x, i = %d\n", (unsigned int) fn, i);
    return fn?fn(NULL, i):i;
}

