main()
{
int i=256;
char buf[i];
}
Run Code Online (Sandbox Code Playgroud)
在g ++上完美编译,但在visual studio 8上出错.
谁知道为什么会这样,
谢谢
在C++中,数组具有恒定的大小.然而,在C99中,存在称为可变长度数组或VLA的东西.这就是你在这里所做的.
g++(C++编译器)是一个兄弟gcc(C编译器),并且g++被允许你使用的是C99功能,同时VS有没有这样的事情.从本质上讲,它是一个非标准的C++扩展.
如果你创建i一个编译时常量,它将起作用(因为那是标准的C++):
const int i = 256; // obviously cannot change at runtime.
Run Code Online (Sandbox Code Playgroud)
如果您需要C++中的动态数组,请使用std::vector.
请注意,在C++中,您需要为其指定返回类型main.这是并且永远都是int.
如前所述,您所做的不是C++标准的一部分.但是,您可以使用以下命令在C++中的堆栈上创建可变长度数组:
{
int length=256;
char *buf = _alloca(length * sizeof(char)); // allocates space on the stack
// that is freed when function returns
}
Run Code Online (Sandbox Code Playgroud)
alloca()也不是标准的一部分,但gcc和Visual Studio都支持它.请注意:当您退出函数时,它分配的空间将被释放,而不是在buf范围的末尾!alloca()在一个循环内将导致痛苦.
如果你并不是绝对肯定需要将数组放在堆栈而不是堆上,那么请使用标准容器std::vector; 它在堆上,但知道如何清理它自己.