为什么这个 C 数组给出 "Expected Expression" 错误?

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

学习 C 编程语言并阅读文档 Xcode 13.2 打开,我面前有一个命令行工具项目。
阅读本文,在 Declarations/Arrays/Variable 长度数组部分:

{
   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
}

并将其复制到 Xcode 中,在 main 函数内,它只是在 int a[n]; 行旁边给我一个“预期表达式”错误。我试图将它放入一个单独的函数中,但这不是解决方案。
这里出了什么问题?
谢谢

唯一可以跟随标签的是声明,声明不是声明。您必须以某种方式将标签后面的代码包装在一个块中:

#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;
}

现在结果应该如你所料:

$ ./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

看在上帝的份上,请不要这样做。

编辑

在标签后只使用一个空语句:

#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;
}