Why is this C array giving the "Expected Expression" error?

learning the C programming language and reading the documentation with Xcode 13.2 open and a Command-Line Tool project in front of me.
Reading this, in the Declarations/Arrays/Variable Length Arrays section:

{
   int n = 1;
label:
   int a[n]; // re-allocated 10 times, each with a different size
   printf("The array has %zu elements\n", sizeof a / sizeof *a);
   if (n++ < 10) goto label; // leaving the scope of a VLA ends its lifetime
}

And copying it in Xcode, inside the main function, it just gives me the "Expected expression" error next to the int a[n]; line. I tried to put this into a separate function but this was not the solution.
What is going wrong here?
Thank you


The only thing that can follow a label is a statement, and a declaration is not a statement. You'll have to wrap the code following the label in a block somehow:

#include <stdio.h>

int main( void )
{
  int n = 1;
label:
   do {
    int a[n];

    printf( "The array has %zu elements\n", sizeof a / sizeof a[0] );
    if ( ++n < 10 ) goto label;
  } while ( 0 );

  return 0;
}

Now the results should be what you expect:

$ ./vla
The array has 1 elements
The array has 2 elements
The array has 3 elements
The array has 4 elements
The array has 5 elements
The array has 6 elements
The array has 7 elements
The array has 8 elements
The array has 9 elements

For the love of God don't do this.

EDIT

Using just an empty statement after the label:

#include <stdio.h>

int main( void )
{
  int n = 1;
label:
  ;
  int a[n];

  printf( "The array has %zu elements\n", sizeof a / sizeof a[0] );
  if ( ++n < 10 ) goto label;    
  return 0;
}