Главная Юзердоски Каталог Трекер NSFW Настройки

Программирование

Ответить в тред Ответить в тред
Check this out!
<<
Назад | Вниз | Каталог | Обновить | Автообновление | 45 5 19
Сап двач, объясните разницу между С и С++ Не раз видел сообщения про то, что это сильно различающиес Аноним 30/12/25 Втр 20:51:33 3615516 1
изображение.png 16Кб, 306x344
306x344
Сап двач, объясните разницу между С и С++
Не раз видел сообщения про то, что это сильно различающиеся языки, при чём судя по обсуждениям речь ни разу не про парадигмы
Т.е. С обмазанный GLib =/= С++
А в чём тогда принципиальная разница? В бесконечных исключениях и умных указателях? Направьте хотя-бы, что или где почитать
Обнял
Аноним 30/12/25 Втр 20:56:20 3615520 2
>>3615516 (OP)
Разный синСани Сантыс
Разные Стишокы
Разные Стишокные библиотеки
Разный бинарный интерфейс
30/12/25 Втр 20:58:15 3615521 3
>>3615520
Разный син-так-сис
Разные стан-дарты
Разные стан-дартные библиотеки
Разный бинарный интерфейс
Аноним 30/12/25 Втр 21:00:42 3615524 4
>>3615520
>Сани Санты
>Стишок
Спасибо Абу

А вообще, разве это имеется ввиду?
Аби особо не касается, а синСани Сантыс зависит скорее от направления либы
Даже в низкоуровневых компонентах ни раз видел либы, где везде читается thiscall, подход же от этого особо не меняется
Аноним 30/12/25 Втр 21:19:47 3615528 5
>>3615516 (OP)
разные парадигмы, Кресты это ООП, Си нет.
30/12/25 Втр 21:23:48 3615530 6
>>3615528
В Стишоке нет парадигм
Аноним 30/12/25 Втр 21:31:09 3615533 7
Аноним 30/12/25 Втр 21:36:58 3615535 8
>>3615533
По фактам
А разница
Аноним 30/12/25 Втр 21:40:24 3615540 9
>>3615535
Разница? 2 - 1 будет 1.
Аноним 30/12/25 Втр 22:49:27 3615580 10
>>3615516 (OP)
>А в чём тогда принципиальная разница?
В ООП - классы, наследование, RAII, исключения
>>3615530
Его там и не должно быть, это следует из исходного дизайна языка
Аноним 30/12/25 Втр 22:55:27 3615584 11
>>3615516 (OP)
>Т.е. С обмазанный GLib =/= С++
Наверное только если особо не присматриваться краем глаза с расстояния километра
Не работал с GLib, но по описанию, это просто либа функций. Никаких тебе деструкторов, а следовательно RAII, а следовательно умных указателей.
А еще шаблонов, лямбд, перегрузки операторов и далее по списку. Ну синСани Сантыс не изменишь, так что придётся корячить костыли.
Аноним 30/12/25 Втр 23:09:37 3615598 12
Аноним 30/12/25 Втр 23:13:25 3615604 13
>>3615521
Но си++ включает в себя си.
Аноним 30/12/25 Втр 23:19:52 3615613 14
>>3615604
Ну вообще не включает, а просто часть похожа на С.
И что это меняет в сказанном?
Аноним 30/12/25 Втр 23:42:22 3615621 15
>>3615516 (OP)
ООП, обобщенное программирование, да куча всего.
Аноним 01/01/26 Чтв 11:09:26 3616043 16
>>3615516 (OP)
see pp лучше во всём чем сиська с точки зрения юзания только пинусу порвальдсу и его карго культистам не нравится. see pp это суперсет над си, поэтому можно его юзать как си, за исключением некоторых подъёбок. лично мне нравится дрочь на комплтайм в цпп. но я хоббист, мб для работяг и bussyнесса цпп это жопаболь
Аноним 01/01/26 Чтв 13:33:32 3616104 17
Сишка это максимально простой язык: идеален для новичка и можно прогать всё уже со старта начиная с сетей заканчивая графикой просто дёргая апи операционной системы для которой этот язык родной.
Си плас плас это ультимативная йоба с кучей фич.
Аноним 01/01/26 Чтв 23:07:04 3616252 18
>>3615520
> Разный бинарный интерфейс
Какой разный? У C++ вообще никакого ABI нет, даже нестабильного.
Аноним 01/01/26 Чтв 23:34:00 3616260 19
>>3616252
Есть. Иначе бы нельзя было бы С++ программу разбить на линкуемые модули. То что это непереносимо это другой вопрос. Но С++ либы существуют. В тех же дистрах линупса есть пакеты с С++ либами.
Аноним 02/01/26 Птн 10:21:30 3616326 20
Аноним 02/01/26 Птн 10:30:46 3616327 21
>>3615516 (OP)
1) С++ - это говно, С - менее говно в сравнении
2) дискриминация по задачам: C++ - прикладные программы, мета-погроммирование, юзер интерфейс; C - прошивки хардвари, ядра ОС, криптографические библиотеки g(nome) lib - параша ёбаная
Аноним 02/01/26 Птн 12:37:51 3616364 22
Грубо говоря - программа на C является урезанной программой на C++:
1) в c++ есть методы, которые представляют из себя те же функции, но с доступом к объекту(структуре или классу. При этом между классом и структурой в c++ не очень великая разница). В C функции запускаются вне контекста объектов;
2) в c++ закидывают кучу всего нового каждую версию, а в C это дело(запизивание всего и вся нового) как-то слабо идёт. C в этом плане более консервативный язык;
3) C++ разрабатывался как универсальный язык с возможностью использовать ООП, но ООП в некоторых местах крайне малоэффективно в силу необходимости то выделять память, то вызывать методы из методов(функции из функций). Так что если ты делаешь какую-то штуку для Ардуино, то лучше использовать C, а если что-то, что рассчитываешь дать в использование другим, то пиши на C++;
Аноним 02/01/26 Птн 15:12:13 3616430 23
>>3616260
Можно пример такой либы, которая распространяется в бинарниках?
Аноним 02/01/26 Птн 15:22:45 3616434 24
>>3616430
Тривиально /usr/lib/libQt6Core.so.6 из пакета qt6-base в арче
Аноним 02/01/26 Птн 15:26:25 3616437 25
>>3616326
И что ты хотел сказать? Там половина уб случаев это что-то вроде разыменовывания указателя на локальную переменную или вызов функции через указатель несовместимого типа. Т.е. всё то что в здравом уме ты делать не станешь. Для аутиста с двача это максимально сложная мысль, я понимаю.
Аноним 03/01/26 Суб 02:03:51 3616812 26
>>3616430
Любая либа? никогда не видел .so файлов анпример?
Или там Qt с кучей дллок?
Аноним 03/01/26 Суб 20:01:42 3617101 27
>>3616437
В C есть неочевидные вещи, например, переполнение переменной типа signed - это UB, а unsigned - не UB.
Или точки следования, например i++ + ++i - это UB.
Аноним 04/01/26 Вск 11:07:22 3617248 28
>>3616437
Обывателю кажется, что
>половина уб случаев это что-то вроде разыменовывания указателя на локальную переменную или вызов функции через указатель несовместимого типа
Поэтому си и является сложным, ибо, это не так.
Аноним 03/02/26 Втр 15:41:57 3636326 29
>>3615516 (OP)
в ЦПП прикрутили возможность автоматически вызвать функцию по выходу экземпляра типа из области видимости
остальное - рюшечки
Аноним 03/02/26 Втр 18:08:36 3636443 30
>>3615516 (OP)
Почему никто не упомянул манглирование?
омном 04/02/26 Срд 00:28:35 3636580 31
В С++ есть много удобных фич, которые позволяют писать код чище, понятнее и более безопасно (динамический диспатчинг, наследование, RAII, namespace'ы и т.п и т.п.). Си максимально простой язык с т.з. своих возможностей (меньше путей сделать одно и то же разными способами), но в том числе этим и ценен (но есть очень много потенциальных проблем в управлении ресурсами и UB).
Но на мой вкус, C++ грустный язык, вкатиться в него в с другого языка та ещё боль, зоопарк возможностей (которые не останавливаются), каждую пятилетку объявляют какие-то фичи "не идиоматическими" и т.п. Если и выбирать, то лучше Rust или Zig для системного программирования и Go для сетевого.
Аноним 04/02/26 Срд 02:27:13 3636598 32
>>3615516 (OP)
Тут уже много кто успел сказать про ООП, про классы и про кучу постоянно добавляемых штук.

Но, увы, качественно важного отличия я не увидел в ответах.

Одно из главшейших отличий - это совершенно иной уровень абстракции: от получения памяти через malloc() к использованию new, от освобождения памяти через free() к специальному оператору delete/delete[], от просто глобальных функций, когда любая функция может вызвать любую другую, объявленную ранее в коде, к пространствам имён и к методам(функциям в концепте метода или целого класса(пользовательского типа данных)), от создания при определенной необходимости функций для выполнения операций над объектами(в c это в основном структуры) к созданию статических и нестатических методов и возможности переопределения операторов(+,-,++,--,[],() и далее).



Кратко: C++ можно рассматривать как сильно улучшенный C.


Если встаёт вопрос, на каком языке писать тот или иной проект, то тут зависит от ситуации:
1) если хочешь поработать с ардуино и железом, то бери C. C++ на фоне C прожорлив.
2) если хочешь как-то сделать проект для десктопа, сервера или просто какую-то удобную библиотеку, то делай все на c++, обрачивая в классы


Успехов тебе!
Аноним 04/02/26 Срд 02:33:48 3636600 33
>>3636598
Если бы ты ещё пояснил, друк, что мешает в принципе создать всё, что ты описал, средствами Си, напр. те же операторы работы с памятью обернуть в какие-нибудь врапперы.
Перегрузка операторов в принципе не сказать, чтоб жизненно необходимая фича.
Аноним 04/02/26 Срд 03:08:53 3636601 34
>>3636600
>операторы работы с памятью обернуть в какие-нибудь врапперы
А мне ты это зачем пишешь?

>>3636600
>Перегрузка операторов в принципе не сказать, чтоб жизненно необходимая фича.
Нигде мною не утверждалось, что это прям крайне необходимая вещь.

Я лишь написал, что c++ находится на совершенно другом уровне абстракции.

Не более.
Аноним 04/02/26 Срд 03:12:35 3636602 35
>>3636601
>А мне ты это зачем пишешь?
Потому что иначе не ясно, зачем понадобился новый язык, а не библиотеки для старого.
Аноним 04/02/26 Срд 03:14:49 3636603 36
>>3636602
>Потому что иначе не ясно, зачем понадобился новый язык, а не библиотеки для старого.
Так если "не ясно", то мне зачем писать?
Аноним 04/02/26 Срд 03:18:42 3636604 37
>>3636600
>что мешает в принципе создать всё, что ты описал, средствами Си, напр. те же операторы работы с памятью обернуть в какие-нибудь врапперы.
А что мешает тебе это сделать?
Аноним 04/02/26 Срд 03:20:17 3636606 38
>>3636603
А зачем вообще что-то отвечать человеку, который задаёт базовый вопрос и хочет разобраться?
В самом первом посте просьба: объясните разницу.
Ты пишешь, мол, там вместо X сделали Y.
При этом совершенно не объясняя, а, почему, собственно, это потребовало нового языка.
Собрался объяснять - объясняй нормально что ли.
Аноним 04/02/26 Срд 03:26:09 3636607 39
>>3636606
>объясните разницу.
Разница объяснена: разный уровень абстракций.

>не объясняя, а, почему
Это уже не ко мне вопрос. Вопрос касаемо причин создания языков и отдельных решений в рамках реализации этих языков надо писать создателям языков.


>Собрался объяснять - объясняй нормально что ли.
Все объяснено.



Если тебе не нравятся мои ответы, то переставай задавать вопросы. Вот и все.
Аноним 04/02/26 Срд 03:48:14 3636610 40
>>3636607
Для того, чтоб работали разные перегрузки и шаблоны, разные неймспейсы и т.д., надо при трасляции манглировать названия сущностей. Посмотри объектники Си и плюсов после трансляции. Первое что заметишь, что к именам функций были добавлены новые символы. И одна полиморфная функция в объектнике имеет разные инстансы с уникальными именами.
В си имена не манглируются.
Типа, там, где в си для foo() будет foo:, в плюсах будет _SMTHfoo:
Это, наверное, основная причина, почему нужного уровня абстракции нельзя получить в Си.
Кроме того, что касается тех же new и delete, они не были бы собой без нового механизма обработки ошибок, а, именно, исключений. В Си есть исключения? То-то и оно, там надо ручками проверять результат работы операций с памятью, чего макака-кодер может не делать.

В итоге Си полезен там, где нужно дергать объектники из разных языков, ты там будешь заведомо знать имя нужной тебе сущности после трансляции.
Дело не в прожорливости, масса вещей в с++ может быть сделана оптимальнее. Например, тебе нужна функция которая будет работать с какими-то структурами данных. При этом для разных структур внутри функции понадобятся разные обработчики. В си ты передавал бы обработчик по указателю на функцию, в плюсах ты можешь сделать заведомо разные реализации без обращений через указатель.
Аноним 04/02/26 Срд 03:53:38 3636611 41
image.png 71Кб, 1108x474
1108x474
image.png 75Кб, 1110x474
1110x474
>>3636610
Вот, собственно, инструмент этой абстракции.
Аноним 04/02/26 Срд 04:21:48 3636613 42
image.png 165Кб, 1279x1199
1279x1199
Собственно, так же работают и неймспейсы.
При этом "анонимный" неймспейс тоже получает имя при трансляции.
Аноним 04/02/26 Срд 04:22:24 3636614 43
>>3636610
Очень хороший разбор причин. Но стоило написать это вот этому >>3636600
Аноним 04/02/26 Срд 04:25:31 3636615 44
image.png 15Кб, 676x106
676x106
Аноним 04/02/26 Срд 04:29:20 3636616 45
Настройки X
Ответить в тред X
15000
Добавить файл/ctrl-v
Стикеры X
Избранное / Топ тредов