请参阅此测试程序:
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
if (argc < 2)
goto end;
char s[strlen(argv[1]) + 1];
strcpy(s, argv[1]);
printf("s=%s\n", s);
end:
return 0;
}
它无法编译并出现错误“跳转到具有可变修改类型的标识符范围”(请参阅其他问题)。
但是,如果我将声明更改s
为此(并包含alloca.h
),它编译得很好:
char *s = alloca(strlen(argv[1]) + 1);
为什么 C 标准允许跳转到使用 创建的对象的范围alloca
,而不是可变长度数组?我以为他们是等价的。