Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.62
remarkes
303 / 226 / 13
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
#1

C99 - массивы переменной длины - C++

17.03.2012, 15:26. Просмотров 5555. Ответов 14
Метки нет (Все метки)

Прочитал в википедии, что стандарт C99 предполагает поддержку массивов переменной длины.
Признаться для меня это небольшой разрыв шаблона.
Если кто-нибудь знает по поводу этой особенности, расскажите пожалуйста как она выражена в Си (то есть как объявляется этот переменный массив и т.д.) и какие компиляторы ее поддерживают (в частности gcc).
Вообщем, кто что знает по этому поводу?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2012, 15:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос C99 - массивы переменной длины (C++):

Поменять стандарт ISO C99 на ISO C90 - C++
На домашнем компьютере (mac) компилирую программы в терминале через gcc, стандарт языка там ISO C99, однако в универе на компах ISO C90,...

Массивы переменной длины в C++Builder - C++ Builder
Разрабатываю одно приложение для расчета экономической части дипломного проекта. Возникла проблема. Чтобы не грузить Вас самим...

Текст переменной длины на форме - C++ Builder
Подскажите, пожалуйста! Есть текст переменной длины и его нужно вывести на форму. Причем, так, чтобы при изменении размеров формы текст...

Массивы переменной длинны - C++ Builder
Как в программе создаваемой в Borland C++ Builder можно создавать массив переменной длины. В программе которую я пишу мне стало необходимо...

Где в настройках RAD Studio 10 Seattle изменить аргумент на -std=c99? - C++ Builder
ребята, где в настройках RAD Studio 10 Seattle изменить аргумент на -std=c99 , что бы компилятор не выдавал ошибок

Возможно ли обращение к переменной с использованием значения строковой переменной? - C++ Builder
Есть структура из 20ти различных элементов. Необходимо сформировать строковую переменную, которая бы содержала названия переменных и их...

14
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.03.2012, 15:48 #2
http://en.wikipedia.org/wiki/Variable-length_array
http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html
1
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
17.03.2012, 18:32 #3
remarkes, это всего лишь значит, что размер массива не обязательно должен быть константой компиляции.
1
Evg
Эксперт CАвтор FAQ
17934 / 6161 / 408
Регистрация: 30.03.2009
Сообщений: 16,913
Записей в блоге: 27
17.03.2012, 18:43 #4
Для локала:

C
1
2
3
4
5
6
7
8
9
10
void func (int x, int y)
{
  int arr[x][y];
 
  ...
  for (i = 0; i < x; i++)
    for (j = 0; j < y; j++)
      a[i][j] = 0;
  ...
}
Для параметра:


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void func (int x, int y, int a[x][y])
{
  ...
  for (i = 0; i < x; i++)
    for (j = 0; j < y; j++)
      r = r + a[i][j];
  ...
}
 
int main (void)
{
  ...
  {
    int b[10][20];
    ...
    func (10, 20, b);
  }
  ...
  {
    int c[30][40];
    ...
    func (30, 40, c);
  }
  ...
}
1
remarkes
303 / 226 / 13
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
17.03.2012, 19:22  [ТС] #5
fasked, проблема в том, что есть учебники (и компиляторы), которые об этом еще не знают...

Добавлено через 2 минуты
Вообщем, всем спасибо - вопрос решен.
0
Evg
Эксперт CАвтор FAQ
17934 / 6161 / 408
Регистрация: 30.03.2009
Сообщений: 16,913
Записей в блоге: 27
17.03.2012, 23:06 #6
Цитата Сообщение от remarkes Посмотреть сообщение
fasked, проблема в том, что есть учебники (и компиляторы), которые об этом еще не знают...
Так это язык Си-99, а не Си и не Си++. Учебник у тебя наверняка не по Си-99. И компилятор наверняка не Си-99
0
remarkes
303 / 226 / 13
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
18.03.2012, 00:40  [ТС] #7
Цитата Сообщение от Evg Посмотреть сообщение
Учебник у тебя наверняка не по Си-99
Я имел ввиду учебники, а не учебник. Т.е. это массовое явление. после 99го года выпуска. Например, Подбельский "Программирование на языке Си". 2009 г. Пишет про "стандарт" ANSI C и ISO. Какой именно он у себя имеет ввиду он пишет так: "Эти ситуации выходят за рамки курса..."
в остальном учебник неплохой.
Ашарина И.В. ООП в С++ 2008 г.
"При этом число_элементов должно быть задано явно либо числом либо константой, так как компилятор резервирует место под массив..."
В предисловии по стандартам пишет "Окончательный стандарт был утвержден в качестве стандарта ANSI C". про то, какой стандарт у C++ вообще ни слова.
ну и вообще книга - г...но

И только в "Язык Си с примерами" Харбисона 2011 г. на с. 160 я вижу главу "Массивы переменной длины".

то есть мистика какая-то: K&R написали книгу и время остановилось. создали борланд, и время остановилось (причем на getch() из conio.h).

Цитата Сообщение от Evg Посмотреть сообщение
И компилятор наверняка не Си-99
у меня компилятор gcc. он знает. а некоторые - нет.
собственно я и хотел проверить, знает ли gcc переменные массивы, когда узнал, что они есть или нет.
0
Evg
Эксперт CАвтор FAQ
17934 / 6161 / 408
Регистрация: 30.03.2009
Сообщений: 16,913
Записей в блоге: 27
18.03.2012, 00:46 #8
Думаю, ты понимаешь, что процентов 90 книг пишутся чисто для срубания денег. Особенно у нас в стране
0
remarkes
303 / 226 / 13
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
18.03.2012, 08:36  [ТС] #9
Evg, да, к сожалению. И даже, если берешь признанного автора, то один хрен переводчики добавят ляпов.
Как глава про Историю Linux или GNU - обязательно будет где-нибудь "бесплатное ПО". (РМС пришел бы в бешенство)... То uid процесса назовут то "реальным", то "действительным"... эх, беда-беда!..
То в одной книге "стандартный компилятор системы UNIX..." (какой именно??! бл.. ??)
вообщем, в этой жизни приходится надеяться только на себя
0
CheshireCat
Эксперт С++
2893 / 1242 / 78
Регистрация: 27.05.2008
Сообщений: 3,375
18.03.2012, 09:50 #10
Цитата Сообщение от remarkes Посмотреть сообщение
Я имел ввиду учебники, а не учебник. Т.е. это массовое явление. после 99го года выпуска. [.....]
Ашарина И.В. ООП в С++ 2008 г. ..........
Вот тут имей в виду следующее:
Языки Си (без ++) и Си++ - это разные языки (хотя и совместимые), что бы ни утверждали авторы разнообразных сочинений на эту тему. И описываются они разными Стандартами - для Си действует ANS/ISO 9899-1999 (C99), для C++ действует ANSI/ISO 14882-2011 (C++11). И если Стандарт Си предусматривает массивы переменной длины, то Стандарт С++ - нет. Поэтому компилятор C++ не обязан (хотя и может, но это всего лишь добрая воля разработчиков компилятора, как, например, в GCC) поддерживать массивы переменной длины.
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
18.03.2012, 10:15 #11
Цитата Сообщение от CheshireCat Посмотреть сообщение
для Си действует ANS/ISO 9899-1999 (C99)
Ну или ISO/IEC 9899:2011 (C11) теперь уже
remarkes, я Вам кстати посоветовал бы поменьше читать русскоязычных авторов. Это, как правило, преподаватели ВУЗ'ов, соответственно без практического опыта программирования.
2
Evg
Эксперт CАвтор FAQ
17934 / 6161 / 408
Регистрация: 30.03.2009
Сообщений: 16,913
Записей в блоге: 27
18.03.2012, 11:14 #12
Цитата Сообщение от CheshireCat Посмотреть сообщение
но это всего лишь добрая воля разработчиков компилятора, как, например, в GCC
У gcc, насколько я понял, VLA позиционируются как собственные расширения, а не как часть стандарта C99: http://gcc.gnu.org/onlinedocs/gcc/ см. раздел 6, в который входит раздел 6.19. Если покопаться в истории, то скорее всего окажется, что VLA в gcc появились ещё до появления C99
0
remarkes
303 / 226 / 13
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
18.03.2012, 12:59  [ТС] #13
Цитата Сообщение от CheshireCat Посмотреть сообщение
Языки Си (без ++) и Си++ - это разные языки
это-то понятно. применительно к учебнику Ашариной - там эти языки (и коды) так намешаны, что только зная конкретно язык Си и отдельно С++ можно понять, что автор в конкретном случае использует.
или пишет "использование директивы define препроцессора в С++ не рекомендуется", типа "делайте через const" и тут же их использует. Ну вы определитесь вконец. (кстати говоря - а почему?).
Ну, или допустим читая фразы типа "существуют две файловые системы FAT и NTFS"... что можно подумать о квалификации автора?

Добавлено через 22 минуты
Цитата Сообщение от fasked Посмотреть сообщение
я Вам кстати посоветовал бы поменьше читать русскоязычных авторов.
прям как по Булгакову
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
19.03.2012, 17:24 #14
remarkes, Ну потому что в плюсах можно обойтись без define-ов совершенно.
0
Evg
Эксперт CАвтор FAQ
17934 / 6161 / 408
Регистрация: 30.03.2009
Сообщений: 16,913
Записей в блоге: 27
19.03.2012, 18:49 #15
Цитата Сообщение от ForEveR Посмотреть сообщение
remarkes, Ну потому что в плюсах можно обойтись без define-ов совершенно.
В С++ можно и без шаблонов обойтись. И без классов.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2012, 18:49
Привет! Вот еще темы с ответами:

Локальные массивы переменной длины - Visual C++
Стандартом С99 предусмотрены локальные массивы переменной длины. void func(const int a) { double Arr; ... }Чем я...

Из элементов массива А длины 2N получить массивы В и С длины N указанным способом - C++
Из элементов массива А длины 2N получить массивы В и С длины N каждый следующим образом. Выбрать в массиве А два наиболее близких по...

массив переменной длины - C++
Как в С++ сделать массив переменной длины (увеличивающийся), чтобы сохранялись хранящиеся там данные? Покопался, но нигде не могу найти. ...

Маски переменной длины - Сети
В общем я совсем запутался. Нужно поделить сеть 172.16.0.0/16 на: 1) 10 подсетей по 1000 хостов 2) 2 подсети по 500 хостов 3) 30...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
19.03.2012, 18:49
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru