Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2011, 19:30   #11
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
разные способы выделения динамической память
на самом деле способ один
просто то, что в С делалось как
Код:
int *p=(int *)malloc(n*sizeof(int));
в С++ делается так
Код:
int *p=new int[n];
по сути отличий мало, С++ просто удобнее и с классами, которые, насколько я знаю, практически те же структуры, но, опять же, с более удобной записью
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 24.01.2011, 20:12   #12
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Автор, ты привёл код на шелле.
Нынче на C некоторые кодят в стиле, похожем на ООП. См. то, как это делают в GTK+:
Код:
  GtkWidget *window;
  GtkWidget *button;
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_container_border_width (GTK_CONTAINER (window), 10);
  button = gtk_button_new_with_label ("Hello World");
  gtk_container_add (GTK_CONTAINER (window), button);
  gtk_widget_show (button);
  gtk_widget_show (window);
Цитата:
int *p=(int *)malloc(n*sizeof(int));
Зачем тип приводить? Можно проще:
Код:
int *p = malloc(n*sizeof(int));
Или ещё проще:
Код:
int p[n]
Причём последнее валидно и для C++ тоже. Это ввели в C99.

И если собрались кодить для ядра, не поленитесь выучить http://www.kernel.org/doc/Documentation/CodingStyle
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

Последний раз редактировалось Obey-Kun; 24.01.2011 в 20:18.
Obey-Kun вне форума Ответить с цитированием
Старый 24.01.2011, 20:41   #13
optimator
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 92
По умолчанию

Цитата:
Зачем тип приводить? Можно проще:

Код:

int *p = malloc(n*sizeof(int));
Присваивание указателю на int указателя на void -это по меньшей мере предупреждение от компиллятора, а Builder и MSVS за это бьют по рукам
Цитата:
Или ещё проще:

Код:

int p[n]
Э то будет правильно,если n объявлена как константа, иначе будет ругань. Только старенький g++ у меня такое компилит(при условии что n переменная).
optimator вне форума Ответить с цитированием
Старый 24.01.2011, 20:50   #14
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Цитата:
Э то будет правильно,если n объявлена как константа, иначе будет ругань. Только старенький g++ у меня такое компилит(при условии что n переменная).
Попросите g++ использовать стандарт 98 года или более новый. Или C99 в случае C.
Вот: http://publib.boulder.ibm.com/infoce...gth_arrays.htm
И вот: http://en.wikipedia.org/wiki/Variable-length_array
Могу и соответствующий текст в стандартах найти, если хотите.

Цитата:
Присваивание указателю на int указателя на void -это по меньшей мере предупреждение от компиллятора, а Builder и MSVS за это бьют по рукам
У меня GCC никогда не ругался.
Читаем: http://en.wikipedia.org/wiki/Malloc#...nd_type_safety — «Under the ANSI C standard, the cast is redundant.».
В C++ таки надо приводить тип. А в C не надо.
Подробнее: http://c-faq.com/malloc/mallocnocast2.html (ваш случай) и http://c-faq.com/malloc/cast.html. И ещё http://c-faq.com/malloc/decl.html
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

Последний раз редактировалось Obey-Kun; 24.01.2011 в 21:05.
Obey-Kun вне форума Ответить с цитированием
Старый 24.01.2011, 20:59   #15
optimator
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 92
По умолчанию

Да с g++ то нет проблем - компилится. Просто не на всех компиляторах такая конструкция прокатывает - MSVS и C++ Builder -ругаются.
optimator вне форума Ответить с цитированием
Старый 24.01.2011, 21:02   #16
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

дурацкий даблпост...
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 24.01.2011, 21:02   #17
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Я предпочитаю писать по стандартам . Да и из компиляторов у меня всегда только GCC. Иногда ICC. И автору уж тем более можно писать по стандартам, ведь он пишет драйвера для Linux.
А в новых версиях MSVS и C++ Builder это не исправлено?
upd: lol, касательно массивов переменной длины в msvc точно не исправлено — http://msdn.microsoft.com/en-us/library/zb1574zs.aspx
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

Последний раз редактировалось Obey-Kun; 24.01.2011 в 21:04.
Obey-Kun вне форума Ответить с цитированием
Старый 24.01.2011, 21:06   #18
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Цитата:
int *p=(int *)malloc(n*sizeof(int));
Зачем тип приводить? Можно проще
Эмм.... почитайте все таки основы Си.
profi вне форума Ответить с цитированием
Старый 24.01.2011, 21:10   #19
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Я двумя постами выше (не считая даблпста) дал ссылки. Почитайте их. Повторю, в C тип возвращаемого malloc значения приводить не надо!
«Under ANSI/ISO Standard C, these casts are no longer necessary.»
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 24.01.2011, 21:14   #20
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Цитата:
Повторю, в C тип возвращаемого malloc значения приводить не надо!
А я повторяю почитайте основы Си Кернигана и Ричи. Вы вообще в курсе, что malloc возвращает void*??? Если да то должны знать, что при работе с указателем на void нужно обязательно приводить к конкретному типу.
profi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БД без драйверов Шульц БД в Delphi 5 20.08.2009 22:31
Программирование драйверов Linux IIePeKoII Qt и кроссплатформенное программирование С/С++ 0 19.02.2009 14:13
порядок установки драйверов photozaz Компьютерное железо 3 21.11.2008 16:46
Установка драйверов AlexandrSid Общие вопросы Delphi 0 14.08.2008 07:43