#include <stdio.h>
int func( int (*x)(int,int) ) { return x(20, 5); }
int func2( int x(int,int) ) { return x(20, 5); }
int func3( int(fn)() ) { return fn(); }
int func4( int(*fn)() ) { return fn(); }
typedef int cellulae_func(int, int);
int tabula(cellulae_func *cell, int lat, int alt) { return cell(lat, alt); }
int soma(int x, int y) { return x + y; }
int sub(int x, int y) { return x - y; }
int teste() { return 42; }
int main(void) {
printf("%d\n", tabula
(soma
, 20, 5)); printf("%d\n", tabula
(sub
, 20, 5)); printf("%d\n", func4
(soma
)); //funciona, mas está errado int (*funcs[2])(int x, int y);
funcs[0] = soma;
funcs[1] = sub;
printf("%d\n", func
(funcs
[0])); }
//https://pt.stackoverflow.com/q/322422/101
I2luY2x1ZGUgPHN0ZGlvLmg+CiAKaW50IGZ1bmMoIGludCAoKngpKGludCxpbnQpICkgeyByZXR1cm4geCgyMCwgNSk7IH0KaW50IGZ1bmMyKCBpbnQgeChpbnQsaW50KSApIHsgcmV0dXJuIHgoMjAsIDUpOyB9CmludCBmdW5jMyggaW50KGZuKSgpICkgeyByZXR1cm4gZm4oKTsgfQppbnQgZnVuYzQoIGludCgqZm4pKCkgKSB7IHJldHVybiBmbigpOyB9CnR5cGVkZWYgaW50IGNlbGx1bGFlX2Z1bmMoaW50LCBpbnQpOwppbnQgdGFidWxhKGNlbGx1bGFlX2Z1bmMgKmNlbGwsIGludCBsYXQsIGludCBhbHQpIHsgcmV0dXJuIGNlbGwobGF0LCBhbHQpOyB9CmludCBzb21hKGludCB4LCBpbnQgeSkgeyByZXR1cm4geCArIHk7IH0KaW50IHN1YihpbnQgeCwgaW50IHkpIHsgcmV0dXJuIHggLSB5OyB9CmludCB0ZXN0ZSgpIHsgcmV0dXJuIDQyOyB9CmludCBtYWluKHZvaWQpIHsKICAgIHByaW50ZigiJWRcbiIsIHRhYnVsYShzb21hLCAyMCwgNSkpOwogICAgcHJpbnRmKCIlZFxuIiwgdGFidWxhKHN1YiwgMjAsIDUpKTsKICAgIHByaW50ZigiJWRcbiIsIGZ1bmMoc29tYSkpOwogICAgcHJpbnRmKCIlZFxuIiwgZnVuYzIoc29tYSkpOwogICAgcHJpbnRmKCIlZFxuIiwgZnVuYzModGVzdGUpKTsKICAgIHByaW50ZigiJWRcbiIsIGZ1bmM0KHRlc3RlKSk7CiAgICBwcmludGYoIiVkXG4iLCBmdW5jNChzb21hKSk7IC8vZnVuY2lvbmEsIG1hcyBlc3TDoSBlcnJhZG8KICAgIGludCAoKmZ1bmNzWzJdKShpbnQgeCwgaW50IHkpOwogICAgZnVuY3NbMF0gPSBzb21hOwogICAgZnVuY3NbMV0gPSBzdWI7CiAgICBwcmludGYoIiVkXG4iLCBmdW5jKGZ1bmNzWzBdKSk7Cn0KIAovL2h0dHBzOi8vcHQuc3RhY2tvdmVyZmxvdy5jb20vcS8zMjI0MjIvMTAx