Си или си плюс

В чем разница между C и C++?

Практически все знают о C и C++, и сейчас пойдет речь о разнице между ними. Главное различие между этих языков, в том, что C — процедурный язык программирования, а C++ является объекто-ориентированным языком. Различий имеется безусловно довольно много, но вы узнаете о главных из них:.

Основные различия будут приведены в таблице:

Поскольку C не поддерживает концепцию ООП, то он не поддерживает полиморфизм, инкапсуляцию и наследование.

C++ поддерживает полиморфизм, инкапсуляцию и наследование, т. к. является объектно-ориентированным языком.

Поскольку C не поддерживает инкапсуляцию, то данные могут редактироваться внешним кодом.

В случае с C++ инкапсуляция скрывает данные, чтобы гарантировать, что структуры данных и операторы используются по назначению.

Не поддерживает перегрузку функций и операторов.

C++ поддерживает как и перегрузку функций, так и перегрузку операторов, а также пространства имен и ссылки, обработка исключений, богатая библиотека.

Не поддерживаются в структуре, не могут быть «друзьями» и виртуальными

Поддерживаются в структуре, могут быть «друзьями» и виртуальными

Функции malloc() и calloc() для динамического выделения памяти, а также free() для освобождения.

Для этих же операций используются операторы new и delete .

Используются scanf() и printf() .

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

О песочнице

Это «Песочница» — раздел, в который попадают дебютные публикации пользователей, желающих стать полноправными участниками сообщества.

Если у вас есть приглашение, отправьте его автору понравившейся публикации — тогда её смогут прочитать и обсудить все остальные пользователи Хабра.

Чтобы исключить предвзятость при оценке, все публикации анонимны, псевдонимы показываются случайным образом.

О модерации

  • рекламные и PR-публикации
  • вопросы и просьбы (для них есть Хабр Q&A);
  • вакансии (используйте Хабр Карьеру)
  • статьи, ранее опубликованные на других сайтах;
  • статьи без правильно расставленных знаков препинания, со смайликами, с обилием восклицательных знаков, неоправданным выделением слов и предложений и другим неуместным форматированием текста;
  • жалобы на компании и предоставляемые услуги;
  • низкокачественные переводы;
  • куски программного кода без пояснений;
  • односложные статьи;
  • статьи, слабо относящиеся к или не относящиеся к ней вовсе.

Источник

В чём отличия языка Си и С++? Зачем нужен Си?

Пример:
Есть некий проект, он реализован через Си и С++. Какой именно проект — не помню, просто где-то видел.
Собственные мысли:
Статьи в интернете практически ничего не дали, поскольку все они сводятся к тому, что Си — процедурный, С++ — ООП. А мне бы конкретики: зачем проекту Си, когда есть С++? На данный момент могу назвать только одно отличие, что динамические массивы удобно писать на Си, и всё.

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

C сейчас используется в основном там, где легаси (куча старого кода в проекте уже на C), или где очень жесткие требования к легкости окружения исполнения языка (микроконтроллеры всякие).

Вы поняли в чём суть моих вопросов, огромное спасибо! Теперь у меня такое представление: Си используется в одном проекте с С++ потому, что очень многое написано на Си, и гораздо проще будет внести правки на нём и реализовать интерфейс между Си и С++, нежели полностью писать на С++. Я правильный сделал вывод? Если есть замечания — обязательно скажите, пожалуйста!

vabka

Да что вы? А в C++ уже есть std::vector, который будет гораздо удобнее любого велосипеда на си.

Си используют там, где нужен очень низкий уровень абстракции над железом и C++ со своим ООП, виртуальными вызовами, и исключениями будет только мешать.

Я пока не дошёл до векторов, приму это во внимание при дальнейшем изучении. Касательно низкой абстракции, что конкретно имеется ввиду? Хотелось бы увидеть примеры.

vabka

Василий Банников, вы, наверное, не так меня поняли. Я имел ввиду следующее: мне нужны примеры «низкой абстракции» над железом на Си и С++.

vabka

zolly, знаете проблему второклассника, который приходит в 10й класс и задаёт вопрос «что такое интеграл»?

да хоть на примере перебирания массива:
на си у тебя есть указатель на какой-то кусок памяти, и ты при помощи адресной арифметики обращаешься к некоторым адресам.

void print_all(int32_t* array, size_t size) < for(size_t i = 0; i < size; i++) < printf("%i", array[i]); >>

На плюсах у тебя есть std::vector который ты можешь перебирать как итерируемый объект.

void print_all(std::vector& vec) < for (auto i : vec) < std::cout >

При этом код на C++ можно ещё шаблонами обмазать, чтобы он принимал не только vector, а вообще любой итерируемый объект.

В этом и проявляется высокоуровневость.

Василий Банников, Спасибо. Если не трудно, можете так же показать на примерах, в каких ситуациях предпочтительнее использовать Си вместо С++?

Начнем с того, что далеко не везде можно с лёгкостью примерять С++ в виду ряда ограничений. Также, довольно часто С++ неожиданно, может оказаться избыточным или ненужным для сфер, где необходим глубокий контроль над тем как система работает.

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

Ещё одной важной причиной может являться проблема с сертификацией: в МРТ аппарате или рентгеновской трубке требования к надёжности должны быть довольно серьезными, а, следовательно, необходимо доказать, что программный пакет (например, новую стандартную библиотеку из С++23) безопасно использовать в данной сфере.

Динамические массивы удобнее писать на С? А если вам нужно хранить в массиве что-то сложнее int? Все равно будет также легко, как на плюсах? Сомневаюсь.

Источник

Разница между Си и Си++

Поправьте меня, если я вдруг где ошибаюсь.
Да, я знаю, что Си и Си++ -это РАЗНЫЕ языки, хоть и синтаксис их очень сильно похож, вплоть до того, что иногда встречаются книги с названием «Учебник по С/С++». Меня интересуют различия. Пытаюсь понять, но нигде не могу найти толкового разъяснения.
Я так понял, что Си++ -это язык, который взял за основу Си и проапгрейдил его до возможностей объектно-ориентированного программирования. На нём стало проще писать прикладные приложения, но за объектно-ориентированность пришлось заплатить меньшей гибкостью, язык стал более «костным», т. е. в результате апгрейда исчезли некоторые плюшки, приятные СИшникам. Но в целом этот практически тот же СИ. Верно или нет?

Подскажите, пожалуйста. Я просто в этом вопросе рачина, что пипец просто, а мне никто так и не объяснит толком=(

УПД.: Если Си++ -это тот же Си, только улучшенный, то тогда почему в рейтинге популярности языков программирования Си занимает 1-е место, а Си++ -только 4-е?

Б. Страуструп называл С++ поначалу как «С с классами». Т. е. С++ это С с возможностью разработки объектно-ориентированного кода. Практически все, что есть в С, заложено и в С++. Но за дополнительные возможности приходится платить. Поэтому объектный и исполнимый код на С, откомпилированный компилятором С++, как правило, тяжелее и неповоротливее, чем такой же, но полученный С-компилятором. И там, где компактность приложения и скорость его работы критична, там без колебаний отказываются от возможностей ООП и используют С вместо С++.

Почти совсем верно. На самом деле «плюшек» исчезло очень мало, и то в большинстве компиляторов они вставлены и в C++, хотя и не входят в его стандарт.
Различия (не расширения) посмотри, например, тут:
http://www.c-cpp.ru/books/razlichie-mezhdu-s-i-s
Я бы добавил еще VLA (Variable Length Array), не включенные в стандарт C++, хотя по факту, как и всё остальное, они часто допускаются компиляторами.

> за объектно-ориентированность пришлось заплатить меньшей гибкостью
Ни разу не пришлось. Никто не мешает писать на С++ приложения хоть вообще без ООП, либо применять ООП только когда считается нужнм. Точно так же можно использовать всю сишную библиотеку и вообще смешивать Си и С++ как кажется нужным, в т. ч. в пределах одного проекта и даже файла исходного кода.
Вот в C# и Java — ООП обязательно, и библиотека может использоваться только своя, а библиотека Си или С++ использоваться не может.

Синтаксис у всех ЯП — достаточно прост, и в общих чертах не отличается.
Везде есть условия, циклы, функции (или хотя бы goto) и т. д.

Различия же начинаются на уровне: массивов, циклов, структур, классов, пространств имен, типов значений.
То есть на уровне того, что относится не столько к синтаксису. сколько к ПЛАТФОРМЕ И БИБЛИОТЕКЕ языка.

И еще больше различий — на уровне платформы и библиотек в общепринятом смысле слова.
Главное в любом ЯП — именно библиотеки (то есть наборы готовых функций, классов и т. д., используемых при написании программ) — как стандартная библиотека, так и альтернативные и сторонные.
Критерий заточенности реализации ЯП для конкретных целей и вообще актуальности ЯП — именно наличие и качество библиотек.

И главное развитие между Си и С++ -опять же в библиотеках.
На Си невозможно работать с .NET и сторонними .NET-библиотеками.
На Си невозможно работать с Qt (во всяком случае, полноценно).
На Си невозможно работать с VCL.
Список можно продолжать.
И это и есть главная причина не использовать Си под виндой, а использовать С++.

Чуток «ДА» и чуток «НЕТ»
Lisp или PROLOG ну ни разу не срастаются с «в общих чертах они не отличаются»))

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

про жуткий список
«На Си невозможно работать с. »
Окстись!
Вполне возможно!
Он всё это поддерживает.
Просто не всегда удобно писать доступ к нестандартным библиотекам

Мудрец (15743) Да ладно? И каким же образом? Чем компилировать сишное приложение под .NET? Я уж молчу о том, что все стоящие WYSIWYG-конструктор GUI работают только с ООП и поэтому GUI все равно придется писать на C++, а не Си, а значит и все приложение будет компилироваться в режиме С++.

«С++» по определению включает в себя «С»
и все плюшки из С можно использовать в С++, хотя многие не рекомендуются.
И прога на «С» годится в «С++»

НО!!
У них идеология разная!

в С вообще нет понятия объекта -он на функциях. Так что никаких классов и методов.

Ближайшее в Сиплюсовому классу там «структура». но в ней в принципе не предусмотрено методов. это просто способ объединения разнородных данных без углубления дальше.

Соответственно там и сами структуры прог строятся по разному. Хотя в С++ часто используются фишки из С. И даже наследуется синтаксис.

UPD:
> это тот же Си, только улучшенный
Не улучшенный и точка, а лучше подходящий для БОЛЬШИНСТВА стандартных ЦЕЛЕЙ ВЫСОКОУРОВНЕВОЙ РАЗРАБОТКИ.

В низкоуровневой разработке Си по-прежнему удобнее и мощнее, а где-то вообще вне конкуренции, так как компиляторов каких-то других ЯП под ту платформу просто нет.

Рейтинги такого типа просто абсурдны.
Из них можно лишь узнать, на чем пишет больший процент, а на чем меньший, из общего числа программистов.
Но у разных программистов задачи разные.
И если китайских программистов, пишущих прошивки для тамагочи на Си или каком-нибудь брейнфаке, оказывается, больше, чем десктопных программистов на С++ (хотя б потому что китайцев вообще больше, чем многих других народов вместе взятых), то из этого никак не следует, что ВАМ на ДЕСКТОПЕ лучше использовать Си или брейнфак.

С++ предлагает свою парадигму программирования. Принимать ее тебе или нет — определяется твоими целями и работатодателем. Лучше это или хуже определять только после досконального изучения. Писать в процедурном стиле можно и в С++.Накоплены обширные библиотеки кода С, которые можно использовать и в С++.Короткие и утилитарные функции можно писать по старинке, на С, поэтому таких программистов больше.

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

Источник

Читайте также:  Jenkins execute python script
Оцените статью