为什么不能在 Visual C++ 中动态分配堆栈内存?但海湾合作委员会可以做到

Why can't allocate stack memory dynamically in visual c++? but gcc can do it

本文关键字:委员会 Visual 不能 C++ 内存 堆栈 动态分配 为什么      更新时间:2023-10-16

当我使用GCC编译以下代码时,它可以正常工作并按照我的预期显示正确的输出,但是当它移至带有Visual C 的Windows时,它会在编译时报告错误。<<<<<<<<<<<<<<<<<<<</p>

#include <stdio.h>
int fun(int numAttrib)
{
    typedef struct {
        int  attribList[numAttrib];
    }VADataFull;
    printf("size=%ldn", sizeof(VADataFull));
    return 0;
}
int main(int i, char** args)
{
    fun(i);
    return 0;
}

实际上,我可以理解为什么VC 无法正常工作,因为正如我们在Shool中学到的那样,我们不能在堆栈中动态分配内存,但是GCC效果很好,所以我感到困惑,任何人都可以告诉我有关此问题的更多信息,谢谢

GCC默认情况下不编译标准C (出于某种疯狂的原因(。它允许各种非标准扩展(例如您的可变长度阵列(。您必须为标准版本和pedticant模式设置开关来执行它:

g++ -std=c++11 -pedantic-errors -o prog prog.cpp

它是对语言的GCC扩展。
https://gcc.gnu.org/onlinedocs/gcc/variable-length.html
如这里可以看到的,当给定C 模式而不是允许使用大量非标准Exstentions的默认GNU时,GCC也不会对其进行编译。

您的代码不是标准C ,这就是为什么它在GCC中编译的原因。

g 支持允许动态尺寸数组的C99功能。