C vs C++ по скорости разработки
Сколько не читал по самым разным форумам, везде пишут про то, что С надо использовать при более-менее низкоуровневом программировании, а С++, типа как чуточку более медленный, во всем остальном.
Если реально посмотреть на вещи, какие фичи С++ дают возможность писать код быстрее, чем на С?
1. ООП? Базовые принципы ООП довольно легко реализовываются на чистом С. Правда, прийдется попрыгать с наследованием (не включением), хотя здесь помогут -fsm-extensions.
2. Большее число библиотек под С++? Я не программист ынтерпрайза, поэтому в _глобальных_ масштабах не мыслю, но мне показалось, что под С есть не меньшее количество либ, чем под плюсы.
3. Исключения? Везде, где я читал про них как киллер-фичу С++ по отношению к С, говорится про то, что код проверок ошибок с исключениями выглядит красивее, лучше, меньше по размеру и т.п. Здесь я также полагаю, что это чушь, ибо если код проверки написан на С (используя возвращаемый код ошибки функции), то такой же код проверки на С++ будет иметь _такой же_ размер — это если вопрос касается размера. А на счет удобочитаемости — так по мне, проверки на С гораздо читабельнее.
4. Namespaces. Это, наверное, единственное, что меня прельщает в плюсах по сравнению с С. Хотя, в С этот недостаток устраняется «писанием» префикса типа some_namespace__*. Правда, в плюсах есть using namespace, что ликвидирует потребность городить тонны имен namespac’ов. Так что, имхо, это единственный плюс С++.
5. Более точная типизация? Возможно это плюс, но никогда не сталкивался на С с ошибками подобного рода (наверное, я просто не кулхацкер).
Что я еще мог опустить, пишите в коментах. Интересно обсудить этот вопрос без срача, школоло и троллинга.
Есть ли случаи, когда C лучше C++? [закрыт]
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах.
Закрыт 6 лет назад .
Здравствуйте. Вопрос из заголовка переписывать не буду.
Интересуют реальные примеры, т.е. не те, когда компилятора C++ под какую-то платформу нет. Различия, в несколько процентов, в производительности, несущественны.
Навеяно "мини-наездом" на C++ на Хабре
UPD: Кроме варианта, что C знаем лучше.
![]()
В общем, реально надо отдавать предпочтение Си тогда, когда стоит очень сильный вопрос оптимизации по времени исполнения и объему памяти. В большинстве случаев это ядра ОС, драйвера (хотя для обоих случаев есть прецеденты написания на С++), базовые утилиты систем, программы для встроенных систем. Возможно, ключевые узлы сетевых распределенных программ с высокой нагрузкой. Ну или как дань традиции — разные утилиты для никсов, которые писать на С++ считается дурным тоном.
Если говорить теоретически, то С имеет одно огромное преимущество перед С++ — простота языка и, как следствие, простота в изучении. С++ сложнее учить, но если его знаешь хорошо, то писать на нем на порядок проще, особенно большие сложные проекты (да и маленькие тоже).
Например, если Вы знаете Си лучше (не нужно говорить, что Си подмножество С++ и любая валидная программа на Си будет валидной на плюсах — это два, хотя и похожих, но разных языка программирования).
Либо если Вы — Линус Тордвальдс:) Он дал исчерпывающий ответ.
А пост на хабре от человека, не осилившего плюсы. Настоящий ценитель С никогда не будет хвалить java и С#.
Всем привет, расскажу почему я считаю что Си лучше C++. И почему надмножество над другим языком это не всегда хорошо.

Язык программирования всегда имеет набор фич. Замечено, что чем меньше фич и чем больше соблюдается ортогональность, тем гибче и выразительнее сам язык, тем легче понимать код.
Возьмём к примеру Си: функции, структуры, указатели, макросы. По-большому счёту это всё, примитивные типы можно считать примером структуры из одного элемента. Довольно быстро привыкаешь и понимаешь как каждая из этих фич взаимодействует между собой:
- функции, указатели: указатели на функции, функция принимающая указатели
- функции, структуры, указатели: структуры содержащие указатели на функции
Макросы никак не взаимодействуют с другими, это просто препроцессор, поэтому тут всё понятно.
И так, можно довольно быстро начать понимать код на Си, т.к. в нём используется ограниченный набор ортогональных фич, хорошо взаимодействующих между собой.
Теперь рассмотрим C++: функции, структуры, указатели, макросы, классы, шаблоны, ссылки, исключения, операторы, методы.
Где есть неортогональные пары, которые очень похожи, частично дублируют своё назначение, из-за этого иногда может быть непонятно где какую из двух использовать, код где сталкиваются две фичи может выглядеть криво или быть труднопонятным:
- указатели и ссылки
- структуры и классы
- макросы и шаблоны
- функции и методы
Количество фич возросло, да ещё и половина из них неортогональна. Из-за этого программисту приходится делать выбор там, где в других языках за него выбрали проектировщики языка. C++ на порядок более сложный язык.
Может быть кто-то скажет: «Ну и фиг что сложный! Я умный, я осилю, я смогу управлять этой мощью!», может и действительно осилит. Я бы избегал любых лишних мысленных телодвижений.
Си легче понимать и это серьёзное преимущество, в реальной жизни время и силы ограничены, если конечно их не тратить на троллинг на форумах, прихлебывая мамкин борщ.
Чем отличается C++ от C#?
Программирование — это основа всего, что нас окружает, начиная от сайтов и заканчивая роботами. Это как ось, на которой вращаются и развиваются компьютерные технологии.
Считается, что языки программирования ведут свой отсчет с появления FORTRAN в 1957 году. Впоследствии самые разные языки, каждый со своими отличительными особенностями, развивались и давали жизнь тем языкам программирования, которые есть сегодня. Например, C и JavaScript и все остальные.
Разработанный Деннисом Ричи язык C ознаменовал собой современную эру программирования, будучи прямым предшественником таких языков, как C++ и C#.
В 1983 году Бьерн Страуструп создал дополнительные совершенствующие расширения для программы на C, которую он назвал «C++» или «C с классами». При этом он использовал новейшие технологии программирования того времени — ООП, или объектно-ориентированное программирование, где объектами выступают фрагменты данных, с которыми программист производит манипуляции. Так возник язык программирования высокого уровня C++, используемый сегодня.
Язык программирования C# (произносится как «си шарп») появился тоже как расширение языка C, но намного позже — в 2002 году. Он был создан командой разработчиков Microsoft под руководством Андерса Хейлсберга на основе платформы .NET framework. Этот язык эволюционировал от C до, возможно, самого технически сложного, но простого в освоении языка: по сравнению с C или C++ он менее подвержен синтаксическим ошибкам.
Заглянув в историю возникновения C++ и C#, узнаем, в чем их отличие друг от друга.
Чем отличается C++ от C#
1. Язык
C++ — объектно-ориентированный язык программирования промежуточного уровня. Упор в нем делается на классах, которые связываются вместе в большой двоичный исполняемый файл.
C# — объектно- и компонентно-ориентированный язык программирования высокого уровня. В нем используются сменные модули кода, которые функционируют самостоятельно и не требуют понимания внутренних механизмов их работы.
2. Производительность
C++ — сложный, более быстрый и эффективный. Используется, когда более высокие языки недостаточно эффективны. Это делает его лучшей программой для задач, требующих большой производительности.
C# — легкий благодаря своей иерархической классификации язык со стандартной по сравнению с C++ эффективностью. Используется в обычных приложениях, таких как программное обеспечение для анализа сетей.
3. Сборка мусора
C++ требует ручного выделения и освобождения памяти для объектов до и после завершения задачи.
C# имеет автоматическую сборку мусора для объектов, запускаемую на виртуальной машине. После выполнения их функций объекты автоматически удаляются для лучшего управления памятью.
4. Платформа
C++ изначально разработан для систем семейства Unix, но используется также для Windows, Mac и Linux. Применяется в любом месте, где для задач требуется прямая связь с аппаратным оборудованием.
C# стандартизированный язык, но предназначен для среды Windows и поэтому редко где используется вне ее.
5. Указатели
На C++ используются в любом месте программы.
На C# используются только в небезопасном режиме или не используются вообще.
6. Среда выполнения
На C++ после написания код компилируется непосредственно в неуправляемый машинный код, так что необходимость в универсальной системе выполнения отпадает. C++ также позволяет выполнять прямые системные вызовы в операционную систему.
На C# код компилируется в промежуточный язык байт-кода и в машинный код общеязыковой средой выполнения CLR, которую затем интерпретирует ASP.NET.
7. Размер двоичного кода
На C++ эта программа легче компилируется, поэтому она легковесна.
На C# двоичный код более сложный, до компиляции у него много накладных расходов и библиотек.
8. Проверка границ
На C++ проверка границ компилятором не выполняется, что чревато повреждением операционной системы при ошибочном синтаксисе: ведь обнаружение не происходит, несмотря на то, что это гибкий язык.
На C# более высокий уровень защиты благодаря проверке, обнаружению ошибок и предупреждениям, выдаваемым компилятором. Это позволяет программе избежать серьезных ошибок.
9. Приложения
На C++ создают как автономные, так и консольные приложения: язык обеспечивает лучшую по сравнению с другими языками производительность. Используется для сетевых, игровых и серверных приложений.
На C# создают наряду с консольными приложениями также приложения ASP.NET, Windows и мобильные приложения.
Заключение
Разобравшись в различиях между C++ и C#, вам теперь легче понять, какую программу использовать при написании кода для конкретного приложения, имея в виду его назначение. И проще решить, в какой язык стоит углубляться и какой осваивать в первую очередь!