М.Двач / Программирование

16 Кб, 306x344
Сап двач, объясните разницу между С и С++ Не раз видел сообщения про то, что это сильно различающиес 30 дек, 20:51 3615516 В конец треда | Веб

Сап двач, объясните разницу между С и С++
Не раз видел сообщения про то, что это сильно различающиеся языки, при чём судя по обсуждениям речь ни разу не про парадигмы
Т.е. С обмазанный GLib =/= С++
А в чём тогда принципиальная разница? В бесконечных исключениях и умных указателях? Направьте хотя-бы, что или где почитать
Обнял

Ответы155201552815533155801558415598156211604316327363263644336598

2 30 дек, 20:56 2 3615520

>>3615516 (OP)
Разный синСани Сантыс
Разные Стишокы
Разные Стишокные библиотеки
Разный бинарный интерфейс

Ответы155211552416252

sage 3 30 дек, 20:58 3 3615521

>>3615520
Разный син-так-сис
Разные стан-дарты
Разные стан-дартные библиотеки
Разный бинарный интерфейс

Ответы15604

4 30 дек, 21:00 4 3615524

>>3615520
>Сани Санты
>Стишок
Спасибо Абу

А вообще, разве это имеется ввиду?
Аби особо не касается, а синСани Сантыс зависит скорее от направления либы
Даже в низкоуровневых компонентах ни раз видел либы, где везде читается thiscall, подход же от этого особо не меняется

5 30 дек, 21:19 5 3615528

>>3615516 (OP)
разные парадигмы, Кресты это ООП, Си нет.

Ответы15530

sage 6 30 дек, 21:23 6 3615530

>>3615528
В Стишоке нет парадигм

Ответы15580

7 30 дек, 21:31 7 3615533

>>3615516 (OP)
Если C - это 1, то C++ - это 2.

Ответы15535

8 30 дек, 21:36 8 3615535

>>3615533
По фактам
А разница

Ответы15540

9 30 дек, 21:40 9 3615540

>>3615535
Разница? 2 - 1 будет 1.

10 30 дек, 22:49 10 3615580

>>3615516 (OP)
>А в чём тогда принципиальная разница?
В ООП - классы, наследование, RAII, исключения
>>3615530
Его там и не должно быть, это следует из исходного дизайна языка

11 30 дек, 22:55 11 3615584

>>3615516 (OP)
>Т.е. С обмазанный GLib =/= С++
Наверное только если особо не присматриваться краем глаза с расстояния километра
Не работал с GLib, но по описанию, это просто либа функций. Никаких тебе деструкторов, а следовательно RAII, а следовательно умных указателей.
А еще шаблонов, лямбд, перегрузки операторов и далее по списку. Ну синСани Сантыс не изменишь, так что придётся корячить костыли.

12 30 дек, 23:09 12 3615598

>>3615516 (OP)
https://www.youtube.com/watch?v=73MYSgOgawo

13 30 дек, 23:13 13 3615604

>>3615521
Но си++ включает в себя си.

Ответы15613

14 30 дек, 23:19 14 3615613

>>3615604
Ну вообще не включает, а просто часть похожа на С.
И что это меняет в сказанном?

15 30 дек, 23:42 15 3615621

>>3615516 (OP)
ООП, обобщенное программирование, да куча всего.

16 1 янв, 11:09 16 3616043

>>3615516 (OP)
see pp лучше во всём чем сиська с точки зрения юзания только пинусу порвальдсу и его карго культистам не нравится. see pp это суперсет над си, поэтому можно его юзать как си, за исключением некоторых подъёбок. лично мне нравится дрочь на комплтайм в цпп. но я хоббист, мб для работяг и bussyнесса цпп это жопаболь

17 1 янв, 13:33 17 3616104

Сишка это максимально простой язык: идеален для новичка и можно прогать всё уже со старта начиная с сетей заканчивая графикой просто дёргая апи операционной системы для которой этот язык родной.
Си плас плас это ультимативная йоба с кучей фич.

Ответы16326

18 1 янв, 23:07 18 3616252

>>3615520
> Разный бинарный интерфейс
Какой разный? У C++ вообще никакого ABI нет, даже нестабильного.

Ответы16260

19 1 янв, 23:34 19 3616260

>>3616252
Есть. Иначе бы нельзя было бы С++ программу разбить на линкуемые модули. То что это непереносимо это другой вопрос. Но С++ либы существуют. В тех же дистрах линупса есть пакеты с С++ либами.

Ответы16430

20 2 янв, 10:21 20 3616326

>>3616104
>Сишка это максимально простой язык: идеален для новичка
>https://port70.net/~nsz/c/c99/n1256.html#J.2
>пук среньк максимальная простота
))

Ответы16437

21 2 янв, 10:30 21 3616327

>>3615516 (OP)
1) С++ - это говно, С - менее говно в сравнении
2) дискриминация по задачам: C++ - прикладные программы, мета-погроммирование, юзер интерфейс; C - прошивки хардвари, ядра ОС, криптографические библиотеки g(nome) lib - параша ёбаная

22 2 янв, 12:37 22 3616364

Грубо говоря - программа на C является урезанной программой на C++:
1) в c++ есть методы, которые представляют из себя те же функции, но с доступом к объекту(структуре или классу. При этом между классом и структурой в c++ не очень великая разница). В C функции запускаются вне контекста объектов;
2) в c++ закидывают кучу всего нового каждую версию, а в C это дело(запизивание всего и вся нового) как-то слабо идёт. C в этом плане более консервативный язык;
3) C++ разрабатывался как универсальный язык с возможностью использовать ООП, но ООП в некоторых местах крайне малоэффективно в силу необходимости то выделять память, то вызывать методы из методов(функции из функций). Так что если ты делаешь какую-то штуку для Ардуино, то лучше использовать C, а если что-то, что рассчитываешь дать в использование другим, то пиши на C++;

23 2 янв, 15:12 23 3616430

>>3616260
Можно пример такой либы, которая распространяется в бинарниках?

Ответы1643416812

24 2 янв, 15:22 24 3616434

>>3616430
Тривиально /usr/lib/libQt6Core.so.6 из пакета qt6-base в арче

25 2 янв, 15:26 25 3616437

>>3616326
И что ты хотел сказать? Там половина уб случаев это что-то вроде разыменовывания указателя на локальную переменную или вызов функции через указатель несовместимого типа. Т.е. всё то что в здравом уме ты делать не станешь. Для аутиста с двача это максимально сложная мысль, я понимаю.

Ответы1710117248

26 3 янв, 02:03 26 3616812

>>3616430
Любая либа? никогда не видел .so файлов анпример?
Или там Qt с кучей дллок?

27 3 янв, 20:01 27 3617101

>>3616437
В C есть неочевидные вещи, например, переполнение переменной типа signed - это UB, а unsigned - не UB.
Или точки следования, например i++ + ++i - это UB.

28 4 янв, 11:07 28 3617248

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

29 3 фев, 15:41 29 3636326

>>3615516 (OP)
в ЦПП прикрутили возможность автоматически вызвать функцию по выходу экземпляра типа из области видимости
остальное - рюшечки

30 3 фев, 18:08 30 3636443

>>3615516 (OP)
Почему никто не упомянул манглирование?

омном 31 4 фев, 00:28 31 3636580

В С++ есть много удобных фич, которые позволяют писать код чище, понятнее и более безопасно (динамический диспатчинг, наследование, RAII, namespace'ы и т.п и т.п.). Си максимально простой язык с т.з. своих возможностей (меньше путей сделать одно и то же разными способами), но в том числе этим и ценен (но есть очень много потенциальных проблем в управлении ресурсами и UB).
Но на мой вкус, C++ грустный язык, вкатиться в него в с другого языка та ещё боль, зоопарк возможностей (которые не останавливаются), каждую пятилетку объявляют какие-то фичи "не идиоматическими" и т.п. Если и выбирать, то лучше Rust или Zig для системного программирования и Go для сетевого.

32 4 фев, 02:27 32 3636598

>>3615516 (OP)
Тут уже много кто успел сказать про ООП, про классы и про кучу постоянно добавляемых штук.

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

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

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

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

Успехов тебе!

Ответы36600

33 4 фев, 02:33 33 3636600

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

Ответы366013660436614

34 4 фев, 03:08 34 3636601

>>3636600
>операторы работы с памятью обернуть в какие-нибудь врапперы
А мне ты это зачем пишешь?

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

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

Не более.

Ответы36602

35 4 фев, 03:12 35 3636602

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

Ответы36603

36 4 фев, 03:14 36 3636603

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

Ответы36606

37 4 фев, 03:18 37 3636604

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

38 4 фев, 03:20 38 3636606

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

Ответы36607

39 4 фев, 03:26 39 3636607

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

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

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

Если тебе не нравятся мои ответы, то переставай задавать вопросы. Вот и все.

Ответы36610

40 4 фев, 03:48 40 3636610

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

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

Ответы3661136614

41 4 фев, 03:53 41 3636611

71 Кб, 1108x47475 Кб, 1110x474

>>3636610
Вот, собственно, инструмент этой абстракции.

165 Кб, 1279x1199
42 4 фев, 04:21 42 3636613

Собственно, так же работают и неймспейсы.
При этом "анонимный" неймспейс тоже получает имя при трансляции.

43 4 фев, 04:22 43 3636614

>>3636610
Очень хороший разбор причин. Но стоило написать это вот этому >>3636600

Ответы36615

15 Кб, 676x106
44 4 фев, 04:25 44 3636615

>>3636614
Передал.

Ответы36616

45 4 фев, 04:29 45 3636616

>>3636615
Вот и славно.

Обновить тред
« /pr/В начало тредаВеб-версияНастройки/a//b//mu//s//vg/Все доски

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

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

Пользуетесь скринридером — пишите, что можно улучшить.
Host-Food.ru — надёжный хостинг от 12 руб/мес | Free DNS
Зеркала М.Двача: m2ch.hk, m2ch.gq, m2ch.cf, m2ch.fapp.in, m2ch.lib, m2chfapiswfw2wcakptqp4o6ltgchvjuxfab7urxlduraomtlnhw5xad.onion