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], но например 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];
ошибочен.
Да и в документации я не встречал такого(может не то читал ).
Поэтому 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, поддерживающее создание массивов, неопределенной длины (а также нулевой длины). |
|