【问题标题】:Why can't allocate stack memory dynamically in visual c++? but gcc can do it为什么不能在Visual C++中动态分配堆栈内存?但 gcc 可以做到
【发布时间】:2019-12-08 13:37:17
【问题描述】:

当我使用 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++ gcc visual-c++ compilation stack-memory


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    这是对语言的 gcc 扩展。
    https://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html
    可以看出here gcc 在给定 c++ 模式而不是允许使用大量非标准扩展的默认 gnu 时也不会编译它。

    【讨论】:

      【解决方案3】:

      您的代码不是标准 C++,这就是它在 gcc 中编译的原因。

      g++ 支持允许动态大小数组的 C99 功能。

      【讨论】:

        猜你喜欢
        • 2014-12-05
        • 1970-01-01
        • 2019-05-17
        • 2011-09-14
        • 2019-12-07
        • 2014-01-19
        • 2020-04-25
        • 2019-11-21
        • 2014-06-01
        相关资源
        最近更新 更多