#include <stdio.h>

int foo(int i) {
    printf("executing %s(%d)\n", __func__, i); // we called bar(), but function is still named "foo"
    return i*i;
}

int main(void) {
    int (*bar)(int) = foo;      // provide an alias to foo
    int foo;                    // shadow the foo identifier
    foo = bar(4);               // foo is an int, call the function through the alias
    printf("4^2 is %d\n", foo); // foo is still an int
}
