Muy curioso, gracias por compartirlo, buscando veo que las funciones anidadas no son parte del estándar de C, sin embargo se implementan como una extensión del compilador GNU C.
Aquí tienes más información
https://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.htmlEn la función
fib , la declaración de una función con el mismo nombre se carga la visibilidad de la función externa, podrías entenderlo como que dentro de
fib se llama a la función
fib_i más cercana a su ámbito, es decir el local. Entonces si llamas a
fib_i dentro de
fib va a entrar a
fib_i, pero a la que está dentro de la función
fibSi llamas a
fib_i desde el
main te llamará a la externa.
Funciona tal y como las variables globales y locales con el mismo identificador.
¡Y Codeblocks no es un compilador, es un entorno de desarrollo!
Saludos.