为什么这个 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;
}
学习 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;
}