c++ - 为什么不能在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 工作正常,所以我感到困惑,谁能告诉我更多关于这个问题的信息,谢谢
解决方案
GCC
默认情况下不编译标准 C++(出于某种疯狂的原因)。它允许各种非标准扩展(例如您的可变长度数组)。您必须为标准版本和迂腐模式设置开关才能强制执行它:
g++ -std=c++11 -pedantic-errors -o prog prog.cpp
推荐阅读
- python - 等待从 queue.Queue 阻塞读取时退出信号
- storage - 在现有 Excel 加载项中使用 OfficeRuntime.storage 的问题
- xml - 从 xslt 中删除多余的字符
- java - 如何火花提交 Spark Streaming 应用程序
- r - 从数据框创建列表的 json 列表
- php - 处理请求池的异常
- java - 无法从 DenseInstance 转换为 Instance
- node.js - 如何将 react js 项目(客户端)和 node js(中间件)项目集成到一个项目中并发布到 azure web 应用程序
- pandas - 每组中的前一个值用缺失值填充
- c# - 在 iOS 上通过 C# IL2CPP 中的反射调用泛型方法