Declaración de variables con el mismo nombre que global, local y estática.

Tengo el siguiente fragmento de código y tengo que analizar cuál será el resultado:

#include <stdio.h>

  void f(int d);

  int a = 1, b = 2, c = 3, d = 4;

  int main(){
    int a = 5, c = 6;
    f(a);
    f(b);
    f(c);
    printf("%d %d %d %d\n",a,b,c,d);
    return 0;
  }

  void f(int d){
    static int a = 0;
    a = a + 7;
    b = a + d;
    c++;
    d--;
    printf("%d %d %d %d\n",a,b,c,d);
  }

La salida que tengo es la siguiente:

7 12 4 4  
15 26 5 11  
21 27 6 5  
5 27 6 4  

Esto realmente me desconcertó. Me di cuenta de que en las 3 funciones llama a la declarada globalmentea sufre la asignación y que en elprintf() desdemain() cuerpo dela declarado enmain() está impreso. Sin embargo, no estoy seguro del comportamiento del resto de las variables. ¿Es este comportamiento indefinido o realmente tiene sentido?

Respuestas a la pregunta(5)

Su respuesta a la pregunta