Является ли следующий фрагмент кода undefined поведением, так как я прыгаю перед объявлением переменной и использую его с помощью указателя? Если да, существуют ли различия между стандартами?
int main() {
int *p = 0;
label1:
if (p) {
printf("%d\n", *p);
return 0;
}
int i = 999;
p = &i;
goto label1;
return -1;
}