Можно ли создать статический массив с размером, который является константой времени выполнения ?

Все мы знаем основные правила для статических массивов:

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 компилирует и выполняет ее нормально.

Очевидно, это не переносимо, но должно быть принято?

Какой компилятор делает правильные действия в этой ситуации?

Кроме того, если это разрешено компилятором, должно ли это быть разрешено хорошими стандартами / практикой программирования?

EDITED: Идея состоит в том, что я хотел бы выделить стек для скорости, но я не знал бы во время компиляции размер массива. Я знаю, что есть и другие решения, и что выделение стека, вероятно, не будет значительной оптимизацией, но я думаю, что это интересное использование.

6
задан jslap 22 October 2010 в 14:28
поделиться