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

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

Восстановить пароль Регистрация
 
 
sys_beginner
1 / 5 / 1
Регистрация: 10.06.2014
Сообщений: 478
08.11.2016, 10:02     Как правильно сделать выбор между С и С++? #1
В первую очередь интересует с точки зрения потребления ресурсов программы а так же быстродействие
Ещё интересно, есть ли операции, которые быстрее в плюсах чем на Си?
Мне нравятся плюсы, но многие пишут что плюсы медленнее в целом чем Си а так же у плюсов есть существенный оверхед потребления ресурсов а у Си он меньше
В каких ситуациях плюсы в целом по скорости и производительности могут быть лучше Си (и могут ли вообще?)
На простых тестах на быстродействие в принципе почти одно и то же (цифры времени исполнения бегают то в пользу си то в пользу плюсов)
Понимаю что одним словом все не опишешь но хотелось бы получить хоть какую то картину
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sys_beginner
1 / 5 / 1
Регистрация: 10.06.2014
Сообщений: 478
08.11.2016, 13:23  [ТС]     Как правильно сделать выбор между С и С++? #21
Цитата Сообщение от DrOffset Посмотреть сообщение
Зачем тут наследование? Просто, чтобы было?
Нет Допустим есть интерфейс и много реализаций, для возможности подменить реализацию без изменения исходного кода программы

Добавлено через 3 минуты
Цитата Сообщение от MrGluck Посмотреть сообщение
Почему, если С++, то сразу ООП? Степанов бы очень огорчился...
Мне по больше части от него нужно только ООП
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
08.11.2016, 13:30     Как правильно сделать выбор между С и С++? #22
Цитата Сообщение от sys_beginner Посмотреть сообщение
Допустим есть интерфейс и много реализаций, для возможности подменить реализацию без изменения исходного кода программы
Так почему вы не требуете того же самого от С? И сравнивая коды, говорите что они одинаковые.
Цитата Сообщение от sys_beginner Посмотреть сообщение
Мне по больше части от него нужно
Ключевое тут первое слово. А тема называется не "Как правильно сделать выбор между С и С++ для меня?" Так что рассматривать нужно объективнее, с конкретными задачами и одинаковыми подходами.

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

Добавлено через 34 секунды
Цитата Сообщение от MrGluck Посмотреть сообщение
И сравнивая коды, говорите что они одинаковые.
имеется ввиду по смыслу. разве это не так? ведь никто не говорит что оба примера идентичны строка в строку. но смысл с точки зрения программиста в них один
просто разные архитектурные решения на разных реализациях
DrOffset
6450 / 3824 / 885
Регистрация: 30.01.2014
Сообщений: 6,620
08.11.2016, 13:54     Как правильно сделать выбор между С и С++? #24
Цитата Сообщение от sys_beginner Посмотреть сообщение
Потому что Си так не умеет
Умеет. Просто ручками надо делать чуть больше.
sys_beginner
1 / 5 / 1
Регистрация: 10.06.2014
Сообщений: 478
08.11.2016, 14:02  [ТС]     Как правильно сделать выбор между С и С++? #25
DrOffset,
А можно пример?
В Си нет абстрактных классов и наследования. Насколько я знаю, максимум что можно сделать это использовать указатели на функции внутри структуры но это архитектурный костыль
В итоге получаем урезанную версию ООП и костыль В том то и смысл что хочется использовать все нормальные ООП фичи

Добавлено через 3 минуты
Цитата Сообщение от sys_beginner Посмотреть сообщение
Насколько я знаю, максимум что можно сделать это использовать указатели на функции внутри структуры
И ещё неизвестно как там будут обстоять дела с выравниванием данных в памяти
DrOffset
6450 / 3824 / 885
Регистрация: 30.01.2014
Сообщений: 6,620
08.11.2016, 14:06     Как правильно сделать выбор между С и С++? #26
Цитата Сообщение от sys_beginner Посмотреть сообщение
А можно пример?
Ядро linux.

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

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

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

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

Цитата Сообщение от Croessmah Посмотреть сообщение
что Вы несете бред. Без обид, но это так.
Видимо вы просто не в состоянии уловить суть.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,900
Записей в блоге: 2
Завершенные тесты: 1
08.11.2016, 14:20     Как правильно сделать выбор между С и С++? #29
Цитата Сообщение от sys_beginner Посмотреть сообщение
Что не так?
Приведенный коды решают разные задачи,
потому подобному сравнению не подлежат.
Цитата Сообщение от sys_beginner Посмотреть сообщение
Видимо вы просто не в состоянии уловить суть.
Я уловил суть - зная на должном уровне C и C++
Вы бы здесь этих вопросов не задавали.
sys_beginner
1 / 5 / 1
Регистрация: 10.06.2014
Сообщений: 478
08.11.2016, 14:24  [ТС]     Как правильно сделать выбор между С и С++? #30
Цитата Сообщение от Croessmah Посмотреть сообщение
Приведенный коды решают разные задачи,
потому подобному сравнению не подлежат.
Нет. Все таки не уловили суть. В сущности, с точки зрения программиста, они решают одну задачу
А именно, имеется сущность "пользователь", ему можно присвоить возраст с помощью метода/функции и получить этот возраст. Представьте что "Си"-шный пример это класс просто ввиду отсутствия необходимого для описания класса синтаксиса функции и поле просто разбросаны по файлику

Цитата Сообщение от Croessmah Посмотреть сообщение
Я уловил суть - зная на должном уровне C и C++ Вы бы здесь этих вопросов не задавали.
Ну я не утверждаю что хорошо знаю С/С++. Но в данном случае мы говорим об архитектуре а её можно обсуждать и без знаний конкретного языка. Даже, представьте себе, можно обсуждать вне контекста языков программирования, например с помощью таких вещей как UML и ему подобным.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,900
Записей в блоге: 2
Завершенные тесты: 1
08.11.2016, 14:30     Как правильно сделать выбор между С и С++? #31
Цитата Сообщение от sys_beginner Посмотреть сообщение
А именно, имеется сущность "пользователь"
В коде для C++ от балды приплетено наследование.
Создайте второго пользователя
с таким подходом в Си, увидите о чем я.
Эти коды - абсолютно разные.

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

Цитата Сообщение от Croessmah Посмотреть сообщение
А чтобы полиморфизм эмитировать, придется еще больше постараться.
В том то и дело что на это у меня нет желания Особенно учитывая тот факт что плюсы уже предоставляют готовое решение
Отсюда и мои вопросы...
DrOffset
6450 / 3824 / 885
Регистрация: 30.01.2014
Сообщений: 6,620
08.11.2016, 14:44     Как правильно сделать выбор между С и С++? #33
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от sys_beginner Посмотреть сообщение
Отсюда и мои вопросы...
Пока что утверждений больше, чем вопросов

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

Больше тут нечего сказать.
sys_beginner
1 / 5 / 1
Регистрация: 10.06.2014
Сообщений: 478
08.11.2016, 14:47  [ТС]     Как правильно сделать выбор между С и С++? #34
Цитата Сообщение от DrOffset Посмотреть сообщение
Пока что утверждений больше, чем вопросов
Так получается))

Понятно, спасибо
Выходит надо просто хорошо знать устройство Си и плюсов, а дальше походу программирования смотреть что где можно использовать а что нет иначе оверхед и тормоза в сравнении с Си неминуемы. Если голова на плечах и есть хорошие знания - результаты плюсов в принципе не будут уступать Си
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,900
Записей в блоге: 2
Завершенные тесты: 1
08.11.2016, 14:49     Как правильно сделать выбор между С и С++? #35
Цитата Сообщение от sys_beginner Посмотреть сообщение
такой костылизацией заниматься не хочется
А так и поступают на Си.
И это не костылизация, это стандартный
подход к решению такого рода проблем.
В конце концов, не статические функции-члены в классах C++
также принимают указатель на экземпляр класса,
только в Си это всё вручную делается,
а в C++ об этом заботится компилятор.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
08.11.2016, 14:54     Как правильно сделать выбор между С и С++? #36
Цитата Сообщение от Croessmah Посмотреть сообщение
а в C++ об этом заботится компилятор.
Если бы ещё не надо было указатель на класс передавать при создании указателя на функцию..(
Причем чаще всего, передавать надо *this.
Или в лямбде в список захвата..

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

Не по теме:

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

DrOffset
6450 / 3824 / 885
Регистрация: 30.01.2014
Сообщений: 6,620
08.11.2016, 14:56     Как правильно сделать выбор между С и С++? #37
Цитата Сообщение от sys_beginner Посмотреть сообщение
Будь это нормальным подходом в плюсах не было бы специального ООП синтаксического сахара и все до сих пор писали бы структуры с указателями на функции
При чем тут "нормальность"? Средства С++ отчасти родились как попытка автоматизировать то, что раньше приходилось делать руками. Если где-то на Си понадобится подобная структура, то ее придется сделать. Об этом и речь. Что у наследования есть определенная сфера применения, так же как у "костыльного" ООП на С. Поэтому может быть и так, что в С++ наследование применено ни к месту, а в Си где-то не хватает более объектного подхода, чтобы избавиться от кода-лапши. Если же мы сравниваем разные коды, в одном у нас модульная структура на классах, а в другом фиксированное число отдельных функций, то о чем вообще речь? Значит, если так, и задачи у кодов разные - в первом случае нам нужно расширять функциональность, а в другом достаточно доступного набора функций. Как это можно сравнивнить, если архитектурно подход другой?

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

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

Подборка ссылок по теме есть тут, схожий вопрос: http://stackoverflow.com/questions/1...ross-compilers
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2016, 15:22     Как правильно сделать выбор между С и С++?
Еще ссылки по теме:

C++ Подскажите как правильно сделать
C++ Подскажите как правильно сделать
Как правильно сделать сортировку? C++

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

Или воспользуйтесь поиском по форуму:
sys_beginner
1 / 5 / 1
Регистрация: 10.06.2014
Сообщений: 478
08.11.2016, 15:22  [ТС]     Как правильно сделать выбор между С и С++? #40
DrOffset,
Спасибо, попробую разобраться
Yandex
Объявления
08.11.2016, 15:22     Как правильно сделать выбор между С и С++?
Ответ Создать тему
Опции темы

Текущее время: 08:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru