изображение.png16 Кб, 306x344
Сап двач, объясните разницу между С и С++ Не раз видел сообщения про то, что это сильно различающиес 3615516 В конец треда | Веб
Сап двач, объясните разницу между С и С++
Не раз видел сообщения про то, что это сильно различающиеся языки, при чём судя по обсуждениям речь ни разу не про парадигмы
Т.е. С обмазанный GLib =/= С++
А в чём тогда принципиальная разница? В бесконечных исключениях и умных указателях? Направьте хотя-бы, что или где почитать
Обнял
2 3615520
>>15516 (OP)
Разный синСани Сантыс
Разные Стишокы
Разные Стишокные библиотеки
Разный бинарный интерфейс
sage 3 3615521
>>15520
Разный син-так-сис
Разные стан-дарты
Разные стан-дартные библиотеки
Разный бинарный интерфейс
4 3615524
>>15520

>Сани Санты


>Стишок


Спасибо Абу

А вообще, разве это имеется ввиду?
Аби особо не касается, а синСани Сантыс зависит скорее от направления либы
Даже в низкоуровневых компонентах ни раз видел либы, где везде читается thiscall, подход же от этого особо не меняется
5 3615528
>>15516 (OP)
разные парадигмы, Кресты это ООП, Си нет.
sage 6 3615530
>>15528
В Стишоке нет парадигм
7 3615533
>>15516 (OP)
Если C - это 1, то C++ - это 2.
8 3615535
>>15533
По фактам
А разница
9 3615540
>>15535
Разница? 2 - 1 будет 1.
10 3615580
>>15516 (OP)

>А в чём тогда принципиальная разница?


В ООП - классы, наследование, RAII, исключения
>>15530
Его там и не должно быть, это следует из исходного дизайна языка
11 3615584
>>15516 (OP)

>Т.е. С обмазанный GLib =/= С++


Наверное только если особо не присматриваться краем глаза с расстояния километра
Не работал с GLib, но по описанию, это просто либа функций. Никаких тебе деструкторов, а следовательно RAII, а следовательно умных указателей.
А еще шаблонов, лямбд, перегрузки операторов и далее по списку. Ну синСани Сантыс не изменишь, так что придётся корячить костыли.
13 3615604
>>15521
Но си++ включает в себя си.
14 3615613
>>15604
Ну вообще не включает, а просто часть похожа на С.
И что это меняет в сказанном?
15 3615621
>>15516 (OP)
ООП, обобщенное программирование, да куча всего.
16 3616043
>>15516 (OP)
see pp лучше во всём чем сиська с точки зрения юзания только пинусу порвальдсу и его карго культистам не нравится. see pp это суперсет над си, поэтому можно его юзать как си, за исключением некоторых подъёбок. лично мне нравится дрочь на комплтайм в цпп. но я хоббист, мб для работяг и bussyнесса цпп это жопаболь
17 3616104
Сишка это максимально простой язык: идеален для новичка и можно прогать всё уже со старта начиная с сетей заканчивая графикой просто дёргая апи операционной системы для которой этот язык родной.
Си плас плас это ультимативная йоба с кучей фич.
18 3616252
>>15520

> Разный бинарный интерфейс


Какой разный? У C++ вообще никакого ABI нет, даже нестабильного.
19 3616260
>>16252
Есть. Иначе бы нельзя было бы С++ программу разбить на линкуемые модули. То что это непереносимо это другой вопрос. Но С++ либы существуют. В тех же дистрах линупса есть пакеты с С++ либами.
20 3616326
>>16104

>Сишка это максимально простой язык: идеален для новичка


>https://port70.net/~nsz/c/c99/n1256.html#J.2


>пук среньк максимальная простота


))
21 3616327
>>15516 (OP)
1) С++ - это говно, С - менее говно в сравнении
2) дискриминация по задачам: C++ - прикладные программы, мета-погроммирование, юзер интерфейс; C - прошивки хардвари, ядра ОС, криптографические библиотеки g(nome) lib - параша ёбаная
22 3616364
Грубо говоря - программа на C является урезанной программой на C++:
1) в c++ есть методы, которые представляют из себя те же функции, но с доступом к объекту(структуре или классу. При этом между классом и структурой в c++ не очень великая разница). В C функции запускаются вне контекста объектов;
2) в c++ закидывают кучу всего нового каждую версию, а в C это дело(запизивание всего и вся нового) как-то слабо идёт. C в этом плане более консервативный язык;
3) C++ разрабатывался как универсальный язык с возможностью использовать ООП, но ООП в некоторых местах крайне малоэффективно в силу необходимости то выделять память, то вызывать методы из методов(функции из функций). Так что если ты делаешь какую-то штуку для Ардуино, то лучше использовать C, а если что-то, что рассчитываешь дать в использование другим, то пиши на C++;
23 3616430
>>16260
Можно пример такой либы, которая распространяется в бинарниках?
24 3616434
>>16430
Тривиально /usr/lib/libQt6Core.so.6 из пакета qt6-base в арче
25 3616437
>>16326
И что ты хотел сказать? Там половина уб случаев это что-то вроде разыменовывания указателя на локальную переменную или вызов функции через указатель несовместимого типа. Т.е. всё то что в здравом уме ты делать не станешь. Для аутиста с двача это максимально сложная мысль, я понимаю.
26 3616812
>>16430
Любая либа? никогда не видел .so файлов анпример?
Или там Qt с кучей дллок?
27 3617101
>>16437
В C есть неочевидные вещи, например, переполнение переменной типа signed - это UB, а unsigned - не UB.
Или точки следования, например i++ + ++i - это UB.
28 3617248
>>16437
Обывателю кажется, что

>половина уб случаев это что-то вроде разыменовывания указателя на локальную переменную или вызов функции через указатель несовместимого типа


Поэтому си и является сложным, ибо, это не так.
29 3636326
>>15516 (OP)
в ЦПП прикрутили возможность автоматически вызвать функцию по выходу экземпляра типа из области видимости
остальное - рюшечки
30 3636443
>>15516 (OP)
Почему никто не упомянул манглирование?
омном 31 3636580
В С++ есть много удобных фич, которые позволяют писать код чище, понятнее и более безопасно (динамический диспатчинг, наследование, RAII, namespace'ы и т.п и т.п.). Си максимально простой язык с т.з. своих возможностей (меньше путей сделать одно и то же разными способами), но в том числе этим и ценен (но есть очень много потенциальных проблем в управлении ресурсами и UB).
Но на мой вкус, C++ грустный язык, вкатиться в него в с другого языка та ещё боль, зоопарк возможностей (которые не останавливаются), каждую пятилетку объявляют какие-то фичи "не идиоматическими" и т.п. Если и выбирать, то лучше Rust или Zig для системного программирования и Go для сетевого.
32 3636598
>>15516 (OP)
Тут уже много кто успел сказать про ООП, про классы и про кучу постоянно добавляемых штук.

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

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

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

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

Успехов тебе!
33 3636600
>>36598
Если бы ты ещё пояснил, друк, что мешает в принципе создать всё, что ты описал, средствами Си, напр. те же операторы работы с памятью обернуть в какие-нибудь врапперы.
Перегрузка операторов в принципе не сказать, чтоб жизненно необходимая фича.
34 3636601
>>36600

>операторы работы с памятью обернуть в какие-нибудь врапперы


А мне ты это зачем пишешь?

>>36600

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


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

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

Не более.
35 3636602
>>36601

>А мне ты это зачем пишешь?


Потому что иначе не ясно, зачем понадобился новый язык, а не библиотеки для старого.
36 3636603
>>36602

>Потому что иначе не ясно, зачем понадобился новый язык, а не библиотеки для старого.


Так если "не ясно", то мне зачем писать?
37 3636604
>>36600

>что мешает в принципе создать всё, что ты описал, средствами Си, напр. те же операторы работы с памятью обернуть в какие-нибудь врапперы.


А что мешает тебе это сделать?
38 3636606
>>36603
А зачем вообще что-то отвечать человеку, который задаёт базовый вопрос и хочет разобраться?
В самом первом посте просьба: объясните разницу.
Ты пишешь, мол, там вместо X сделали Y.
При этом совершенно не объясняя, а, почему, собственно, это потребовало нового языка.
Собрался объяснять - объясняй нормально что ли.
39 3636607
>>36606

>объясните разницу.


Разница объяснена: разный уровень абстракций.

>не объясняя, а, почему


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

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


Все объяснено.

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

В итоге Си полезен там, где нужно дергать объектники из разных языков, ты там будешь заведомо знать имя нужной тебе сущности после трансляции.
Дело не в прожорливости, масса вещей в с++ может быть сделана оптимальнее. Например, тебе нужна функция которая будет работать с какими-то структурами данных. При этом для разных структур внутри функции понадобятся разные обработчики. В си ты передавал бы обработчик по указателю на функцию, в плюсах ты можешь сделать заведомо разные реализации без обращений через указатель.
41 3636611
>>36610
Вот, собственно, инструмент этой абстракции.
image.png165 Кб, 1279x1199
42 3636613
Собственно, так же работают и неймспейсы.
При этом "анонимный" неймспейс тоже получает имя при трансляции.
43 3636614
>>36610
Очень хороший разбор причин. Но стоило написать это вот этому >>36600
image.png15 Кб, 676x106
44 3636615
>>36614
Передал.
45 3636616
>>36615
Вот и славно.
Обновить тред
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски

Скачать тред только с превьюс превью и прикрепленными файлами

Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах.Подробнее