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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2011, 21:26   #21
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Вот вы упрямый-то. По ссылкам-то ходили? Там и насчёт белой библии упомянули.
Цитата:
By the way, the language in sections 6.5 and 7.8.5 of K&R2 which suggests that the casts are required is ``overenthusiastic.''
Или вот ещё:
Цитата:
You don't cast the result, since:
- It is unnecessary, as void * is automatically and safely promoted to any other pointer type.
- It can hide an error, if you forgot to include <stdlib.h>.
- It adds clutter to the code, casts are not very easy to read (especially if the pointer type is long).
- It makes you repeat yourself, which is generally a badness.
(ключевой пункт второй).
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 24.01.2011, 21:27   #22
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Извините, но это вы упрямый. Как говориться "спешал фо ю". Специально для вас набрал код, что бы показать, что будет.

Код:
mingw32-g++.exe -Wall -fexceptions  -g     -c C:\CB\Console\main.cpp -o obj\Debug\main.o
C:\CB\Console\main.cpp: In function 'int main()':
C:\CB\Console\main.cpp:6:22: error: invalid conversion from 'void*' to 'int*'
Код:
Код:
#include<stdio.h>
#include<stdlib.h>

int main()
{
    int *p = malloc(3);

    return 0;
}
profi вне форума Ответить с цитированием
Старый 24.01.2011, 21:31   #23
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Ты собираешь код при помощи g++, едрить твою за ногу!!! А речь о C! Так и собирай в gcc!
Скачай, блин, ISO/IEC 9899:1999 и поищи там по паттерну «malloc»!
Сил моих уже нет!

Вот тебе, подавись:
ISO/IEC 9899:1999, 6.3.2.3, п. 1:
Цитата:
A pointer to void may be converted to or from a pointer to any incomplete or object
type. A pointer to any incomplete or object type may be converted to a pointer to void
and back again; the result shall compare equal to the original pointer.
Кстати, писать "return 0;" в main не надо что для C, что для C++. Она и так вернёт 0, когда завершится. Но тут всё уже зависит от вашего стиля.

И «чтобы» надо было слитно писать в том сообщении.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

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

Вижу действительно спор бессмысленный. Не знаю, не проверял в gcc. Скорее всего будет работать. Но делать так опасно, так как это "а как там нам компилятор тип приведет", что может привести к некорректным действиям. Я лично всегда привожу к типу явно при использовании malloc. Ага и main тоже не пешите, нафик она вообще нужна .

Последний раз редактировалось profi; 24.01.2011 в 21:46.
profi вне форума Ответить с цитированием
Старый 24.01.2011, 21:47   #25
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Компилятор приведёт всё по стандарту, о какой опасности может идти речь? В большинстве проектов на C, что я видел, никто malloc не приводит, и абсолютно правильно делает.

Цитата:
Ага и main тоже не пешите, нафик она вообще нужна
Это было введено в C99 (то есть в C89 такого ещё не было). Вот, опять процитирую стандарты:
ISO/IEC 9899:1999 5.1.2.2.3
Цитата:
... reaching the } that terminates the main function returns a value of 0.
И в C++ это есть. ISO/IEC 14882:1998 3.6.1 пункт 5
Цитата:
If control reaches the end of main without encountering a return statement, the effect is that of executing "return 0;"
Что не так?
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

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

Кхм.... мне бы за такое начальство уши бы оторвало. Не знаю, что вы за проекты видели, но могу сказать, точно, что если программист полагается на компилятор "ну, как то там он должен тип привести, а я не буду этого делать" или "ну, не буду я из main ничего возвращать или вообще напишу void main() пусть компилятор разгребает". Поверьте (проверено) вот такое отношение к коду приведет к множеству ошибок.
profi вне форума Ответить с цитированием
Старый 24.01.2011, 21:59   #27
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Ну вы вообще. Программист должен опираться НА СТАНДАРТЫ. Что написанно в стандарте, тем и пользоваться.

Или это новая мода — игнорировать стандарты?

При чём здесь компилятор вообще?
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 24.01.2011, 22:05   #28
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Цитата:
При чём здесь компилятор вообще?
Это так , бесплатное приложение к языку.
Цитата:
Или это новая мода — игнорировать стандарты?
Я их не игнорирую, прошу заметить.
Цитата:
Программист должен опираться НА СТАНДАРТЫ.
А так же на логику своих действий. И не полагаться, что кто-то, какой-то тип данных без его участия приведет правильно.
profi вне форума Ответить с цитированием
Старый 24.01.2011, 22:05   #29
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

[повторный пост]
profi вне форума Ответить с цитированием
Старый 24.01.2011, 22:08   #30
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Цитата:
А так же на логику своих действий. И не полагаться, что кто-то его тип без его участия преобразует правильно.
То есть стандарт отходит на втором месте? Давайте тогда вместо while использовать конструкции на goto, а вместо битового сдвига ассемблерные вставки. Вдруг что-то пойдёт не так!
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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