Массивы переменного размера в C

Думаю, мой вопрос: верно ли следующее C

<code>int main(void) {
  int r = 3;
  int k[r];
  return 0;
}
</code>

Если так, то кому-нибудь интересно объяснить, почему он работает не в компиляторе C Microsoft, а в GCC и когда он был добавлен в стандарт C.

Спасиб

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

Решение Вопроса

которое не поддерживается текущим MSVC. Вы можете легко заменить его в MSVC на _alloca (выделение стека, которое не требует ручного освобождения со стороны программиста):

#include <malloc.h>

...

int *k = (int *)_alloca(sizeof(*k)*r);
 adk29 июн. 2009 г., 04:29
Я всегда использовал это, но не получил ошибку, пока я не использовал Windows, это проясняет мою путаницу
 Matthew Flaschen28 июн. 2009 г., 09:01
Он был стандартизирован в течение 10 лет ...
 bdonlan28 июн. 2009 г., 05:24
Это было расширение GCC, но было кодифицировано в C99. MSVC действительно еще не поддерживает это. Также обратите внимание, что в Linux это alloca (), а не _alloca, и он находится в <alloca.h>

которое не поддерживается текущим MSVC. Вы можете легко заменить его в MSVC на _alloca (выделение стека, которое не требует ручного освобождения со стороны программиста)

да, но он ограничен 1 МБ

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

void foo(int n)
{
    int bar[n];
    .
    .
}

Здесь нет явной проверки ошибок. Большойn может легко вызвать проблемы.

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