Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700

Как правильно сделать выбор между С и С++?

08.11.2016, 10:02. Показов 2207. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В первую очередь интересует с точки зрения потребления ресурсов программы а так же быстродействие
Ещё интересно, есть ли операции, которые быстрее в плюсах чем на Си?
Мне нравятся плюсы, но многие пишут что плюсы медленнее в целом чем Си а так же у плюсов есть существенный оверхед потребления ресурсов а у Си он меньше
В каких ситуациях плюсы в целом по скорости и производительности могут быть лучше Си (и могут ли вообще?)
На простых тестах на быстродействие в принципе почти одно и то же (цифры времени исполнения бегают то в пользу си то в пользу плюсов)
Понимаю что одним словом все не опишешь но хотелось бы получить хоть какую то картину
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.11.2016, 10:02
Ответы с готовыми решениями:

Помогите сделать выбор между двумя книгами
Хотел бы летом углубить свои знания по программированию на C++, поэтому решил купить книгу. Колеблюсь между этими двумя: C++ для...

Как сделать правильный выбор между C# и Java?
Здравствуйте. В далеком прошлом, я занимался пустой тратой времени. А именно - выбором языков программирования. Но со временем я выбрал...

Необходимо сделать выбор между: Netgear WN3000RP и LINKSYS RE1000-EE, как репитеры для NETGEAR WNDR4000
Доброго всем дня!:help::help: Подскажите кто сталкивался в работе с Ретранслятором Linksys RE1000-EE и Netgear WN3000RP. В квартире у...

39
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
08.11.2016, 13:23  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от DrOffset Посмотреть сообщение
Зачем тут наследование? Просто, чтобы было?
Нет Допустим есть интерфейс и много реализаций, для возможности подменить реализацию без изменения исходного кода программы

Добавлено через 3 минуты
Цитата Сообщение от MrGluck Посмотреть сообщение
Почему, если С++, то сразу ООП? Степанов бы очень огорчился...
Мне по больше части от него нужно только ООП
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
08.11.2016, 13:30
Цитата Сообщение от sys_beginner Посмотреть сообщение
Допустим есть интерфейс и много реализаций, для возможности подменить реализацию без изменения исходного кода программы
Так почему вы не требуете того же самого от С? И сравнивая коды, говорите что они одинаковые.
Цитата Сообщение от sys_beginner Посмотреть сообщение
Мне по больше части от него нужно
Ключевое тут первое слово. А тема называется не "Как правильно сделать выбор между С и С++ для меня?" Так что рассматривать нужно объективнее, с конкретными задачами и одинаковыми подходами.

Но что-то у нас получается как в повести "О Фоме и Ерёме".
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
08.11.2016, 13:34  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
Так почему вы не требуете того же самого от С?
Потому что Си так не умеет
Цитата Сообщение от MrGluck Посмотреть сообщение
А тема называется не "Как правильно сделать выбор между С и С++ для меня?"
Ну забыл добавить "для меня" Думаю это не критично, ведь и так заметно что спрашиваю для себя

Добавлено через 34 секунды
Цитата Сообщение от MrGluck Посмотреть сообщение
И сравнивая коды, говорите что они одинаковые.
имеется ввиду по смыслу. разве это не так? ведь никто не говорит что оба примера идентичны строка в строку. но смысл с точки зрения программиста в них один
просто разные архитектурные решения на разных реализациях
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
08.11.2016, 13:54
Цитата Сообщение от sys_beginner Посмотреть сообщение
Потому что Си так не умеет
Умеет. Просто ручками надо делать чуть больше.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
08.11.2016, 14:02  [ТС]
DrOffset,
А можно пример?
В Си нет абстрактных классов и наследования. Насколько я знаю, максимум что можно сделать это использовать указатели на функции внутри структуры но это архитектурный костыль
В итоге получаем урезанную версию ООП и костыль В том то и смысл что хочется использовать все нормальные ООП фичи

Добавлено через 3 минуты
Цитата Сообщение от sys_beginner Посмотреть сообщение
Насколько я знаю, максимум что можно сделать это использовать указатели на функции внутри структуры
И ещё неизвестно как там будут обстоять дела с выравниванием данных в памяти
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
08.11.2016, 14:06
Цитата Сообщение от sys_beginner Посмотреть сообщение
А можно пример?
Ядро linux.

Напомню ветвь дискуссии.
Цитата Сообщение от sys_beginner Посмотреть сообщение
Допустим есть интерфейс и много реализаций, для возможности подменить реализацию без изменения исходного кода программы
Цитата Сообщение от MrGluck Посмотреть сообщение
Так почему вы не требуете того же самого от С?
Цитата Сообщение от sys_beginner Посмотреть сообщение
Потому что Си так не умеет
А теперь конкретный пример - модули ядра linux. Почти весь код ядра написан с солидной долей ООП подхода и прекрасно себя чувствует.
Язык другой, подход к ООП - другой. Это нужно понять.

Цитата Сообщение от sys_beginner Посмотреть сообщение
Насколько я знаю, максимум что можно сделать это использовать указатели на функции внутри структуры но это архитектурный костыль
А как ты думаешь реализованы виртуальные функции в С++? Именно таким способом.

Добавлено через 1 минуту
Цитата Сообщение от sys_beginner Посмотреть сообщение
И ещё неизвестно как там будут обстоять дела с выравниванием данных в памяти
Извини, но тут ты не понимаешь, о чем говоришь.
1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
08.11.2016, 14:12
Цитата Сообщение от sys_beginner Посмотреть сообщение
А чем не сравнение?
Потому что оно глупое.
Во-первых, зачем-то приперли наследование без причины,
а во-вторых, создайте с таким подходом два "объекта" в Си.
В общем и целом, почитав тему пришел к выводу,
что Вы несете бред. Без обид, но это так.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
08.11.2016, 14:14  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Язык другой, подход к ООП - другой. Это нужно понять.
В том то и дело что понимаю Из за того что такой подход меня не устраивает, решил создать подобную тему.
Цитата Сообщение от DrOffset Посмотреть сообщение
А как ты думаешь реализованы виртуальные функции в С++? Именно таким способом.
Ну и что? Не соглашусь. Будь это нормальным подходом в плюсах не было бы специального ООП синтаксического сахара и все до сих пор писали бы структуры с указателями на функции
Цитата Сообщение от DrOffset Посмотреть сообщение
Извини, но тут ты не понимаешь, о чем говоришь.
Возможно. В принципе указатели фиксированного размера и проблем быть не должно. Но помню где то читал что в случае использования указателей на функции внутри структуры возникают какие то проблемы с выравниванием(не вникал особо в суть)

Добавлено через 1 минуту
Цитата Сообщение от Croessmah Посмотреть сообщение
Во-первых, зачем-то приперли наследование без причины,
Мне нужно было обязательно написать реальную архитектуру из какого нибудь приложения? Я показал тот факт что в этом может быть необходимость. Что не так?

Цитата Сообщение от Croessmah Посмотреть сообщение
что Вы несете бред. Без обид, но это так.
Видимо вы просто не в состоянии уловить суть.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
08.11.2016, 14:20
Цитата Сообщение от sys_beginner Посмотреть сообщение
Что не так?
Приведенный коды решают разные задачи,
потому подобному сравнению не подлежат.
Цитата Сообщение от sys_beginner Посмотреть сообщение
Видимо вы просто не в состоянии уловить суть.
Я уловил суть - зная на должном уровне C и C++
Вы бы здесь этих вопросов не задавали.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
08.11.2016, 14:24  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Приведенный коды решают разные задачи,
потому подобному сравнению не подлежат.
Нет. Все таки не уловили суть. В сущности, с точки зрения программиста, они решают одну задачу
А именно, имеется сущность "пользователь", ему можно присвоить возраст с помощью метода/функции и получить этот возраст. Представьте что "Си"-шный пример это класс просто ввиду отсутствия необходимого для описания класса синтаксиса функции и поле просто разбросаны по файлику

Цитата Сообщение от Croessmah Посмотреть сообщение
Я уловил суть - зная на должном уровне C и C++ Вы бы здесь этих вопросов не задавали.
Ну я не утверждаю что хорошо знаю С/С++. Но в данном случае мы говорим об архитектуре а её можно обсуждать и без знаний конкретного языка. Даже, представьте себе, можно обсуждать вне контекста языков программирования, например с помощью таких вещей как UML и ему подобным.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
08.11.2016, 14:30
Цитата Сообщение от sys_beginner Посмотреть сообщение
А именно, имеется сущность "пользователь"
В коде для C++ от балды приплетено наследование.
Создайте второго пользователя
с таким подходом в Си, увидите о чем я.
Эти коды - абсолютно разные.

Добавлено через 1 минуту
Цитата Сообщение от sys_beginner Посмотреть сообщение
и поле просто разбросаны по файлику
итого у нас может быть только один "объект" такого типа.
Для множества - придется усложнять код.
А чтобы полиморфизм эмитировать, придется еще больше постараться.
Так что когда коды будут готовы к сравнению, тогда и сравним.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
08.11.2016, 14:35  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
В коде для C++ от балды приплетено наследование.
Это просто для примера что бы мои мысли были понятны
Цитата Сообщение от Croessmah Посмотреть сообщение
Создайте второго пользователя
Ну можно обернуть в структуру и создавать экземпляры но как уже писал выше такой костылизацией заниматься не хочется

Цитата Сообщение от Croessmah Посмотреть сообщение
А чтобы полиморфизм эмитировать, придется еще больше постараться.
В том то и дело что на это у меня нет желания Особенно учитывая тот факт что плюсы уже предоставляют готовое решение
Отсюда и мои вопросы...
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
08.11.2016, 14:44
Лучший ответ Сообщение было отмечено Undisputed как решение

Решение

Цитата Сообщение от sys_beginner Посмотреть сообщение
Отсюда и мои вопросы...
Пока что утверждений больше, чем вопросов

Впрочем, ответы на вопросы просты:
* Да, на С++ можно писать также эффективно, как на С.
* Да, можно даже при этом не до конца отказываться от "фишек" С++, например шаблоны и наследование при грамотном подходе не будут вносить оверхеда, по сравнению с аналогичной реализацией на С.
* Да, С++ может давать оверхед, если программист не понимает как он работает "внутри".
* Да, есть определенная цена за универсальность, при использовании некоторых инструментов С++.

Больше тут нечего сказать.
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
08.11.2016, 14:47  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Пока что утверждений больше, чем вопросов
Так получается))

Понятно, спасибо
Выходит надо просто хорошо знать устройство Си и плюсов, а дальше походу программирования смотреть что где можно использовать а что нет иначе оверхед и тормоза в сравнении с Си неминуемы. Если голова на плечах и есть хорошие знания - результаты плюсов в принципе не будут уступать Си
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
08.11.2016, 14:49
Цитата Сообщение от sys_beginner Посмотреть сообщение
такой костылизацией заниматься не хочется
А так и поступают на Си.
И это не костылизация, это стандартный
подход к решению такого рода проблем.
В конце концов, не статические функции-члены в классах C++
также принимают указатель на экземпляр класса,
только в Си это всё вручную делается,
а в C++ об этом заботится компилятор.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
08.11.2016, 14:54
Цитата Сообщение от Croessmah Посмотреть сообщение
а в C++ об этом заботится компилятор.
Если бы ещё не надо было указатель на класс передавать при создании указателя на функцию..(
Причем чаще всего, передавать надо *this.
Или в лямбде в список захвата..

Добавлено через 1 минуту

Не по теме:

Давно хотел поплакаться на эту тему :) Аж с души слегло

0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
08.11.2016, 14:56
Цитата Сообщение от sys_beginner Посмотреть сообщение
Будь это нормальным подходом в плюсах не было бы специального ООП синтаксического сахара и все до сих пор писали бы структуры с указателями на функции
При чем тут "нормальность"? Средства С++ отчасти родились как попытка автоматизировать то, что раньше приходилось делать руками. Если где-то на Си понадобится подобная структура, то ее придется сделать. Об этом и речь. Что у наследования есть определенная сфера применения, так же как у "костыльного" ООП на С. Поэтому может быть и так, что в С++ наследование применено ни к месту, а в Си где-то не хватает более объектного подхода, чтобы избавиться от кода-лапши. Если же мы сравниваем разные коды, в одном у нас модульная структура на классах, а в другом фиксированное число отдельных функций, то о чем вообще речь? Значит, если так, и задачи у кодов разные - в первом случае нам нужно расширять функциональность, а в другом достаточно доступного набора функций. Как это можно сравнивнить, если архитектурно подход другой?

Цитата Сообщение от sys_beginner Посмотреть сообщение
Но помню где то читал что в случае использования указателей на функции внутри структуры возникают какие то проблемы с выравниванием(не вникал особо в суть)
Зачем об этом писать, если ты в суть не вник?
Об этом и речь, нужно понимать, что ты делаешь. Тогда и вопросы твои будут разрешимы и очевидны.
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
08.11.2016, 15:06  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
только в Си это всё вручную делается,
а в C++ об этом заботится компилятор.
В этом и заключается моя боль
Цитата Сообщение от DrOffset Посмотреть сообщение
При чем тут "нормальность"?
В том плане что эти же задачи можно решить более лаконично общепринятым подходом
Многие ведущие языки с поддержкой ООП предоставляют одинаковые средства для разработки в ООП стиле
В связи с этим наблюдается некоторая стандартизация возможностей у разных языков для этого подхода
"Нормально" может и не корректно было сказано, пусть будет "общепринятые подходы"

Цитата Сообщение от DrOffset Посмотреть сообщение
Зачем об этом писать, если ты в суть не вник?
Думал развить вопрос, что бы кто то из опытных помог разобраться если такая проблема есть К тому же я ничего не утверждал а лишь предположил что это возможно
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
08.11.2016, 15:19
Цитата Сообщение от sys_beginner Посмотреть сообщение
если такая проблема есть
Проблема там более общая, упирается в разные варианты ABI и их взаимодействие. Такие проблемы возникают, например, на стыке 64-разрядных и 32-разрядных приложений, или просто приложений, собранных разными компиляторами. Конкретно структуры с указателями тут виноваты не больше, чем любые другие типы данных.
Как правило, платформа (а рамках операционной системы и архитектуры процессора) гарантирует переносимость. Для windows, например, от этой гарантии зависит работа такой вещи как COM (которую и из С можно использовать).

Подборка ссылок по теме есть тут, схожий вопрос: http://stackoverflow.com/quest... -compilers
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
08.11.2016, 15:22  [ТС]
DrOffset,
Спасибо, попробую разобраться
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.11.2016, 15:22
Помогаю со студенческими работами здесь

Как правильно дублировать в actionscript 2.0 и как правильно сделать объект для дублирования
Я только начал изучать actionscript и прошу мне помочь. Как правильно дублировать в actionscript 2.0 и как правильно сделать объект для...

Как сделать выбор цвета и выбор толщины кисти в MDI приложении?
Работаю с mdi приложениями в виде Paint, но не знаю кода что бы присваивать mdi приложению такие вс-ва как: 1)выбор цвета 2) выбор толщены...

Сделать выбор между двумя нетбуками по одной цене, но с разными преимуществами
Доброго времени суток форумчанам! Помогите выбрать нетбук: http://www.notebook.ru/notebook/asus-eee-pc-1015bx-12971/ Asus...

Как сделать,у меня сервер обычная XP,как мне правильно сделать так,что бы некоторые компы отрезать от инета,но не от базы данных(К+ и 1С и т.п)
Система токая,инет идет на модем,с модема идет на хаб,с хаба на всех??? какой прогой лучше воспльзываться?? если есть возможнасть то...

OpenFileDialog1 - Как убрать выбор директории, сделать её по умолчанию одну пример "C://cjkdsofj.sys" это выбор файла
Вопрос в шапке


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru