C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
создание массива, создание массива
icewind
Отправлено: 28.11.2004, 12:55


Ученик-кочегар

Группа: Участник
Сообщений: 12



В программе есть следующий код:

int n=0;
fscanf(input,"%d",&n) //файл открыт
float p[n][2];

Компилятор Builder'а его не воспринимает (т.к. n не константное выражение; например, так все ОК: const int=10; float p[n][2]wink.gif, но например lcc (компилятор языка С) проглатывает нормально. В чем причина?

Вопрос: как создать массив, если его размер до выполнения программы не известен (вводится пользователем)? Неужели придется использовать malloc (выделять строку памяти и считать ее массивом)?

Какие есть еще компиляторы C/С++ под win, кроме Buildera? В чем их плюсы и минусы?

Заранее благодарен!

Георгий
Отправлено: 28.11.2004, 14:08


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



почему lcc это проглатывает не знаю

если используешь C++, то массивы создавый используя STL (класс vector)
если чистый C, то только malloc

под MS Windows С/С++ компиляторов много:
1. Borland CBuilder — в первую очередь система быстрого создания пользовательского интерфейса и связи его с данными, а потом уже C компилятор
2. Borland C — компилятор C под Ms Windows
3. MS Visual C — тоже самое но от MS. В нем сделан упор на командную разработку приложений. Почти все программные продукты фирмы Rational имеют с ним работать.
4. Watcom C++ — умершая ветвь компиляторов. в своё время отличались высоким качеством оптимизации кода и большим спектром поддерживаемых платформ.

все вышеназванные имеют IDE под MS Windows

а из чистых компиляторов можно вспомнить:
1. GNU
2. интеловский
icewind
Отправлено: 28.11.2004, 17:03


Ученик-кочегар

Группа: Участник
Сообщений: 12



С массивом, как и предполагалось, ничего не вышло... Буду использовать malloc...

По поводу компиляторов.

Мне бы хотелось найти маленький (<10MB) компилятор с редактором кода (подсвечивание текста и т.д.). Знаю два подходящих варианта:

- Borland C++ v.5.5.1 — но это есть только компилятор (без редактора кода), работающий из-под comand line
- lcc — только C, к тому же какой-то странный (см выше)

Пожайлуста подскажите еще!!!

Раскажите, если можно, про GNU
xTrim
Отправлено: 29.11.2004, 06:43


Машинист паровоза

Группа: Участник
Сообщений: 208



Dev CPP
QUOTE

Dev-C++ is an full-featured Integrated Development Environment (IDE) for Win32. It uses GCC, Mingw or Cygwin as compiler and libraries set.


Отредактировано xTrim — 29/11/2004, 09:47
icewind
Отправлено: 01.12.2004, 18:55


Ученик-кочегар

Группа: Участник
Сообщений: 12



Попробовал компилятор Dev-C++ — понравился. Как и вообще gcc под Win (MinGw). Не подскажите где найти к нему документацию?

Теперь про массивы...

В гниге Stroustrup'а "The C++ Programming Language (Third Edition)" по этому поводу сказано:
"The number of elements of the array, the array bound, must be a constant expression".
Т.е. код

int n=0;
fscanf(input,"%d",&n);
float p[n][2];

ошибочен.
Да и в документации я не встречал такого(может не то читал smile.gif).
Поэтому Borland'овские компиляторы(конкретно Builder 6 и Borland C++ 5.5.1)

выдают ошибку "Constant expresion required". НО ПОЧЕМУ GCC НЕ ОБРАЩАЕТ НА ЭТО ВНИМАНИЯ?
Может быть дело в настройках компиляторов? Помогите разобраться!

P.S. Программу, в которой используется этод код, компилируют и gcc и lcc-win32 без ошибок. Но .exe от gcc'а работает точно так как и задумывалось, а .exe от lcc-win32'а в обращении к массиву глючит( функция fscanf() неправильно заносит в него данные). Кому интересно, могу выслать код.

Asher
Отправлено: 01.12.2004, 19:25


Мастер участка

Группа: Модератор
Сообщений: 550



Привет.
malloc не надо, лучше пользоваться парой new и delete.
icewind
Отправлено: 03.12.2004, 20:51


Ученик-кочегар

Группа: Участник
Сообщений: 12



В документации к gcc откопал, что этот компилятор имеет расширение языка C, поддерживающее создание массивов, неопределенной длины (а также нулевой длины).

Вернуться в Вопросы программирования в C++Builder