为什么不能在 Visual C++ 中动态分配堆栈内存?但海湾合作委员会可以做到
Why can't allocate stack memory dynamically in visual c++? but gcc can do it
当我使用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功能。
相关文章:
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 试图在visual studio上用C++创建一个桌面应用程序
- 如何在MS Visual Studio 2019中运行QT UI
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- Visual Studio Code - C++ Debugger 無法啟動
- Visual C++ constexpr Hints
- 为什么它不适用于Visual 2019的原因
- Visual Studio 2019:插入多个C++风格的单行注释
- Visual Studio Code "undefined reference to `WinMain@16'"
- visual在c++中将十进制数转换为二进制数
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- Visual Studio中的函数声明和函数定义问题
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- Visual C++(VS2017)中用户定义的转换不明确
- Visual C++GC接口如何启用它以及要包含哪个库
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- visual c++,如何获取解决方案目录中的代码
- Visual Studio mkl_link_tool.exe链接错误
- 为什么不能在 Visual C++ 中动态分配堆栈内存?但海湾合作委员会可以做到