Pour compléter la réponse de Merlyn, voici un cas où cela entraînerait probablement un comportement que vous n'aviez pas prévu :
#include <stdio.h>
int main (){
int *p;
{
int v = 1;
p = &v;
}
{
int w = 2;
printf("%d\n", w);
}
printf("%d\n", *p);
return 0;
}
Le compilateur peut optimiser cela en ayant v
y w
partagent la même allocation sur la pile. Encore une fois, le compilateur peut ne pas optimiser cela - c'est pourquoi le comportement de l'utilisation de pointeurs vers des variables après la fin de leur bloc de fermeture n'est pas défini. Le programme peut produire "2" et "1", ou "2" et "2", ou "2" et quelque chose de complètement différent selon le compilateur et les paramètres utilisés.