首页 > 解决方案 > 为什么不能在Visual C++中动态分配堆栈内存?但 gcc 可以做到

问题描述

当我使用 gcc 编译以下代码时,它可以正常工作并按我的预期显示正确的输出,但是当它使用 Visual c++ 移动到 Windows 时,它会在编译时报告错误。

#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 工作正常,所以我感到困惑,谁能告诉我更多关于这个问题的信息,谢谢

标签: c++gccvisual-c++compilationstack-memory

解决方案


GCC默认情况下不编译标准 C++(出于某种疯狂的原因)。它允许各种非标准扩展(例如您的可变长度数组)。您必须为标准版本和迂腐模式设置开关才能强制执行它:

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

推荐阅读