Локальные массивы переменной длины

  • Автор темы DiRob
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D

DiRob

#1
Стандартом С99 предусмотрены локальные массивы переменной длины.

void func(const int a)
{
double Arr[a];
...
}

Чем я активно пользовался.
Но тут мне потребовалось написать кое какую ерунду под винды.
Я использовал Microsoft Visual Studio .NET 2003 и понял, что ничего не понял.
Конструкция описанная выше забраковывалась со следующим основанием:

..\VarArr.cpp(18): error C2057: expected constant expression
..\VarArr.cpp(18): error C2466: cannot allocate an array of constant size 0
..\VarArr.cpp(18): error C2133: 'Arr' : unknown size

MSDN по этому поводу логичен и лаконичен, из чего я могу предположить, что такое не прокатит. Сама проблемма решается простым использованием динамического выделения, дело не в этом. Просто как то странно это...

Вопрос:
1. Почему???
2. Какому стандарту принадлежит данный компилятор???

P.S. Пробовал Visual Studio 2005, результат тот же... Может там чего настроить надо?
 
D

Dimmuborgir

#2
сделайте вызов этой функции. к примеру
Код:
func(4);
.
 
D

DiRob

#3
VarArr.cpp
------------------------------------------------
#include "stdio.h"

extern void func(const int a);

int main(void)
{
func(20);
return 0;
}

void func(const int a)
{
int Arr[a];
}
------------------------------------------------

При компиляции такого файлика, получаем:
..\VarArr.cpp(14): error C2057: expected constant expression
..\VarArr.cpp(14): error C2466: cannot allocate an array of constant size 0
..\VarArr.cpp(14): error C2133: 'Arr' : unknown size
 

Kmet

Java Team
25.05.2006
1 036
8
#5
welcome to the real worl. так же как не все йогурты одинаково полезны, не все компилаторы одинаково хорошо держат стандарт. и спользование слабо переносимых фенечек считается плохим тоном. используй std::auto_prt(new ...) или еще лучше сразу std::vector
 

Kmet

Java Team
25.05.2006
1 036
8
#6
можно пробовать bounded_array из буста, он на стеке выделяет память
 
Статус
Закрыто для дальнейших ответов.