Стандартом С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, результат тот же... Может там чего настроить надо?
Dimmuborgir
26:05:2008, 10:47
сделайте вызов этой функции. к примеру
func(4);
.
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
Dimmuborgir
27:05:2008, 06:36
"extern" - к чему бы это?)
welcome to the real worl. так же как не все йогурты одинаково полезны, не все компилаторы одинаково хорошо держат стандарт. и спользование слабо переносимых фенечек считается плохим тоном. используй std::auto_prt(new ...) или еще лучше сразу std::vector
можно пробовать bounded_array из буста, он на стеке выделяет память
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.