为什么不能在 Visual C++ 中动态分配堆栈内存?但是 gcc 可以做到
Why can't allocate stack memory dynamically in visual c++? but gcc can do it
当我用 gcc 编译下面的代码时,它工作正常并且显示了我预期的正确输出,但是当它移动到 windows 用 visual c++ 时,它在编译时报告错误。
#include <stdio.h>
int fun(int numAttrib)
{
typedef struct {
int attribList[numAttrib];
}VADataFull;
printf("size=%ld\n", sizeof(VADataFull));
return 0;
}
int main(int i, char** args)
{
fun(i);
return 0;
}
其实我能理解为什么vc++不行,因为我们在shool里学过,我们不能在栈中动态分配内存,但是gcc可以,所以我很困惑,能不能谁能告诉我更多关于这个问题的信息,谢谢
GCC
默认情况下不编译标准 C++(出于某些疯狂的原因)。它允许各种非标准扩展(比如你的可变长度数组)。您必须为标准版本和迂腐模式设置开关以强制执行它:
g++ -std=c++11 -pedantic-errors -o prog prog.cpp
它是该语言的 gcc 扩展。
https://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html
可以看出 here 当给定 c++ 模式而不是允许使用大量非标准扩展的默认 gnu 时,gcc 也不会编译它。
您的代码不是标准 C++,这就是它在 gcc 中编译的原因。
g++ 支持允许动态调整数组大小的 C99 功能。
当我用 gcc 编译下面的代码时,它工作正常并且显示了我预期的正确输出,但是当它移动到 windows 用 visual c++ 时,它在编译时报告错误。
#include <stdio.h>
int fun(int numAttrib)
{
typedef struct {
int attribList[numAttrib];
}VADataFull;
printf("size=%ld\n", sizeof(VADataFull));
return 0;
}
int main(int i, char** args)
{
fun(i);
return 0;
}
其实我能理解为什么vc++不行,因为我们在shool里学过,我们不能在栈中动态分配内存,但是gcc可以,所以我很困惑,能不能谁能告诉我更多关于这个问题的信息,谢谢
GCC
默认情况下不编译标准 C++(出于某些疯狂的原因)。它允许各种非标准扩展(比如你的可变长度数组)。您必须为标准版本和迂腐模式设置开关以强制执行它:
g++ -std=c++11 -pedantic-errors -o prog prog.cpp
它是该语言的 gcc 扩展。
https://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html
可以看出 here 当给定 c++ 模式而不是允许使用大量非标准扩展的默认 gnu 时,gcc 也不会编译它。
您的代码不是标准 C++,这就是它在 gcc 中编译的原因。
g++ 支持允许动态调整数组大小的 C99 功能。