Компиляторы GNU и Visual Studio для массивов, выделенных с постоянной длины с областью действия

Я знаю, что если вы установите динамическое значение в c / c ++, вы не сможете использовать это значение в скобках для выделения массива (что сделало бы его так называемым массивом переменной длины (VLA), которыйтекущий стандарт C ++ не поддерживает)...

то есть см .:
C ++: массив переменной длины
http://en.wikipedia.org/wiki/Variable-length_array

То, что я не совсем понимаю (и то, что я не видел, спрашивается именно здесь), это то, почему GNU c / c ++ компиляторы (gcc, g++) все в порядке с использованием динамического выделения, основанного на целочисленном значении (насколько я могу судить), при условии, что это значение является константой в пределах области распределения лучей, ноVisual Studios не поддерживает это и откажется компилировать код, выплевывая ошибки.

например вg++

void Foo(const unsigned int bar)
{
  double myStuff[bar];
  //... do stuff...
}

... компилируется просто отлично ...

Но тот же код отказывается компилироваться в версиях VS, которые я использовал, если только я не передам строкуconst во всех сферах или является#define, static const, и т.д.

Я подозреваю, что, возможно, компиляторы GNU используют область видимости, чтобы сделать вывод, что это значение является константой в этой области видимости, и либо просто присвоить ее malloc, либо обработать ее каким-то образом.

Мои вопросы:

Кто (VS или GNU) ближе к стандарту с точки зрения того, как они справляются с этим?Есть ли способ сделать это с помощью VS[] на значение, которое постоянно в рамках, но не глобальноconst на протяжении всей программы безmalloc вызов?Есть ли какие-либо проблемы, о которых мне следует знать, если я использую это в своем скомпилированном GNU-коде?

Ответы на вопрос(2)

Ваш ответ на вопрос