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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2011, 22:47   #31
Dayman
Форумчанин
 
Аватар для Dayman
 
Регистрация: 12.01.2011
Сообщений: 186
По умолчанию

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

Код:
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;
}
Код:
C:\Users\Dayman\Documents\CodeBlocks\tsttst>mingw32-g++.exe -Wall -g -x c main.c

main.c: In function 'main':
main.c:6:10: warning: unused variable 'p'
нормально компиляется.
Lingua c++ non penis caninus est.
Dayman вне форума Ответить с цитированием
Старый 24.01.2011, 22:51   #32
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Dayman, а по стандарту C++ не должно. Используйте флаг --pedantic.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 24.01.2011, 23:20   #33
Dayman
Форумчанин
 
Аватар для Dayman
 
Регистрация: 12.01.2011
Сообщений: 186
По умолчанию

Ааа, так у вас с++, я думал с. Тогда не должно компиляться, я то задавал -x c.
Lingua c++ non penis caninus est.
Dayman вне форума Ответить с цитированием
Старый 24.01.2011, 23:30   #34
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Это сарказм был. Почитай обсуждение на тех двух страницах. Товарищ сначала утверждал, что такое запрещено стандартом, а когда ему указали, что он собирает с помощью C++, а в С так можно, продолжил наставить на своём. Что мол «пофиг, что по стандарту можно, хороший программист так делать не должен».

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

Obey-Kun только, что полазил по некоторым материалам посвященным С и С++, и нашел довольно таки интересную вещь. Написано, что действительно void* который возвращает функция malloc будет приведен автоматически к нужному типу, но также и сказано, что явное приведение типа является более безопасным и может скрыть случайную ошибку. И это является спорным вопросом. А некоторые товарищи утверждают, что в С++ нет понятия переменная. Давайте не будем опять.
Цитата:
На самом деле, даже в самом стандарте C в примерах кода везде используется malloc без приведения
Вам в книге Кернигана и Ритчи страницу указать конкретную или сами посмотрите?

Последний раз редактировалось profi; 24.01.2011 в 23:38.
profi вне форума Ответить с цитированием
Старый 24.01.2011, 23:38   #36
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2profi
Цитата:
только, что полазил по некоторым материалам посвященным С и С++, и нашел довольно таки интересную вещь. Написано, что действительно void* который возвращает функция malloc будет приведен автоматически к нужному типу, но также и сказано, что явное приведение типа является более безопасным и может скрыть случайную ошибку.
автоматически он будет приведен в языке СИ, но в плюсах нужно явно привести (еще один момент, не пользоваться маллоком в плюсах).

Цитата:
но также и сказано, что явное приведение типа является более безопасным и может скрыть случайную ошибку
да, действительно, люди, пишущие на СЯХ (не плюсы) явно приводят, для ясности

и нет тут никаких спорных вопросов)
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 24.01.2011, 23:44   #37
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Цитата:
А некоторые товарищи утверждают, что в С++ нет понятия переменная.
Виноват. Посмотрел стандарт, там описывается этот термин.

Цитата:
Написано, что действительно void* который возвращает функция malloc будет приведен автоматически к нужному типу, но также и сказано, что явное приведение типа является более безопасным и может скрыть случайную ошибку.
А также привести к случайным ошибкам, например:
Код:
MyStruct *p;
// .... тут 50 строк кода
p=(MyStruct *)malloc(n*sizeof(int));
Через год вы меняете тип p на MyOtherStruct:
Код:
MyOtherStruct *p;
// .... тут 50 строк кода
p=(MyStruct *)malloc(n*sizeof(int));
Мысль ясна?

Повторение самого себя в программировании — это плохо.

Вообще, это, как и return 0 в main — дело вкуса. Но return 0 в main многие делают и это плохим тоном не считается, а приведение malloc вы во многих проектах не встретите.

Опасности нет.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

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

Аналогично виноват, не посмотрел стандарт, что можно делать без приведения типа . Мысль ясна, короче, кто хочет для ясности - пишите, кто нет - не пишите .

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

Насчёт хорошего тона и приведения malloc. Погуглил ещё. В некоторых C-проектах malloc приводят, в некоторых нет. Всё зависит от coding style, принятого в проекте. Вот и всё. Но главное, что хотелось до вас донести — что там делать можно по стандарту.
Кстати, соответствующий параграф в стандарте я тогда приводил, что ж вы его не заметили.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 24.01.2011, 23:51   #40
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Та все ок . Приятно было поспорить со знающим человеком
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