我们都知道静态数组的基本规则:
int size = 20;
char myArray[size];
不合法。
而且。const int size = 20;
char myArray[size];
没问题。
但是,这个怎么办。
int f(const int size)
{
char myArr[size];
}
void main()
{
f(2);
f(1024);
}
MSVC表示这是一个错误,而gcc似乎可以编译并正常执行。
显然,它不具备可移植性,但它应该被接受吗?
哪个编译器在这种情况下做得正确?
此外,如果编译器允许,良好的编程标准/实践是否应该允许它?
编辑:我的想法是我想要堆栈分配以获得速度,但我不知道数组的大小在编译时是多少。我知道还有其他解决方案,并且堆栈分配可能不是一个重要的优化,但我认为这是一种有趣的用法。