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?