901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700

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

08.11.2016, 10:02. Показов 2657. Ответов 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
8217 / 5048 / 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
19506 / 10109 / 2463
Регистрация: 30.01.2014
Сообщений: 17,833
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
19506 / 10109 / 2463
Регистрация: 30.01.2014
Сообщений: 17,833
08.11.2016, 14:06
Цитата Сообщение от sys_beginner Посмотреть сообщение
А можно пример?
Ядро linux.

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

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

Добавлено через 1 минуту
Цитата Сообщение от sys_beginner Посмотреть сообщение
И ещё неизвестно как там будут обстоять дела с выравниванием данных в памяти
Извини, но тут ты не понимаешь, о чем говоришь.
1
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 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
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 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
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 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
19506 / 10109 / 2463
Регистрация: 30.01.2014
Сообщений: 17,833
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
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
08.11.2016, 14:49
Цитата Сообщение от sys_beginner Посмотреть сообщение
такой костылизацией заниматься не хочется
А так и поступают на Си.
И это не костылизация, это стандартный
подход к решению такого рода проблем.
В конце концов, не статические функции-члены в классах C++
также принимают указатель на экземпляр класса,
только в Си это всё вручную делается,
а в C++ об этом заботится компилятор.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
08.11.2016, 14:54
Цитата Сообщение от Croessmah Посмотреть сообщение
а в C++ об этом заботится компилятор.
Если бы ещё не надо было указатель на класс передавать при создании указателя на функцию..(
Причем чаще всего, передавать надо *this.
Или в лямбде в список захвата..

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

Не по теме:

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

0
19506 / 10109 / 2463
Регистрация: 30.01.2014
Сообщений: 17,833
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
19506 / 10109 / 2463
Регистрация: 30.01.2014
Сообщений: 17,833
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru