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?