deklaracja zmiennych o takiej samej nazwie jak globalna, lokalna i statyczna

Mam następujący fragment kodu i muszę przeanalizować, jaki będzie wynik:

#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);
  }

Mam następujące dane wyjściowe:

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

To naprawdę mnie zaskoczyło. Zauważyłem, że we wszystkich 3 wywołaniach funkcji zadeklarowano globalniea cierpi na to zadanie i to wprintf() zmain() ciałoa zadeklarowano wmain() jest drukowane. Nie jestem jednak pewien zachowania pozostałych zmiennych. Czy to niezdefiniowane zachowanie, czy faktycznie ma sens?

questionAnswers(5)

yourAnswerToTheQuestion