Что лучше c или c

от admin

Выбор между C++ и C#

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

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

Отдельных статей требует рассмотрение выбора Java или же интерпретируемых языков. Они будут предпочтительнее, чем С++ или С# в некоторых случаях, однако вынесем такие случаи за рамки данной статьи и сфокусируемся на сравнении С++ и С#.

Для ясности обозначу, что под C++ буду понимать unmanaged код, а под C# — managed код. В статье можно было сравнить managed и unmanaged, но это было бы менее полезно практический. А mixed код, хотя он и представляет некоторый интерес, оставим по большей части за рамками данной статьи.

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

1. Скорость разработки

С# позволяет стартовать разработку быстрее, а это позволяет быстрее получить прототип решения. Скорость разработки на С# на начальных этапах проекта значительно выше по сравнению с С++.
Однако, когда инфраструктура проекта создана, основные подходы и библиотеки выбраны, а билд настроен, скорость разработки на С++ и скорость разработки на С# становятся примерно одинаковыми.
Таким образом, в коротких малобюджетных проектах С# будет иметь преимущество по скорости разработки, но в длинных и относительно дорогих данное преимущество будет незначительным.

2. Кросплатформенность

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

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

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

И хотя С# возможно использовать для построения приложений под не-Windows платформы, проблемы, вызываемые использованием .net в не-Windows окружении, сводят на нет многие преимущества выбора C#. Поэтому рекомендовать его для кроссплатформенного использования можно разве что если код на C# уже написан. При этом надо четко понимать, что в перспективе это будет приносить дополнительные затраты на поддержку.

3. Производительность кода и требовательность к ресурсам

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

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

Если говорить о совокупности субъективных «простоты разработки», «красоты кода» и объективной производительности, то используя C# проще написать код, удовлетворяющий этим критериям одновременно. Однако это не значит, что производительный код на С++ обязательно будет страшным или сложным для восприятия, просто при его написании потребуется более «творческий» подход для удовлетворения перечисленных критериев одновременно.

Фундаментальные основы преимуществ С++ в возможности писать код, который будет выполняться непосредственно процессором, и возможности прямой работы с памятью. Конечно, свобода дает больше возможностей создать себе проблемы, но в ряде случаев это лучше, чем невозможность преодоления потолка производительности. И этот потолок вполне может привести, например, к тому, что под решение задачи, для которого бы хватило одного хорошего сервера, вам придется собирать ферму из нескольких серверов, или же к тому, что ваше приложение будет требовать «топового» железа на задачи, для которых хватило бы железа выпущенного лет 7-10 назад.

4. Библиотеки

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

Другая неприятная особенность С++ библиотек — это создание и переопределение своих базовых типов. Многие С++ библиотеки заводят свои типы строк, контейнеров, переопределяют некоторые базовые типы. Этому есть логичные объяснения (лучшая производительность, поддержка кросплатформенности, отсутствие подходящих типов на момент написание библиотеки), однако все это не добавляет удобства использования и красоты коду. Базовые же С++ библиотеки дают не так много, как дают стандартные библиотеки С#, поэтому подбор правильных библиотек для проекта С++ — это задача, необходимая даже в сравнительно простых проектах.

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

В С# перечисленных выше проблем значительно меньше. Огромное количество библиотек с .net идет в базе, плюс к ним множество свободно доступных библиотек, это покрывает практически все первостепенные задачи разработки под Windows. Наличие большого количества стандартных типов почти избавляет от библиотек, где базовые типы переопределены. И в силу того, что библиотеки С# сравнительно молодые,- интерфейсы библиотек, как правило, лучше вписываются в те или иные шаблоны проектирования, что часто упрощает их изучение.

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

Вторая неприятная особенность библиотек С# в том, что многие из них являются просто оберткой над unmanaged библиотеками, что будет всегда приводить к потерям производительности на конверсиях типов, и создавать дополнительные проблемы отладки и распространения.

5. Удобство отладки

Можно было бы просто сказать, что под Window, С# заметно удобнее отлаживать и на этом остановиться.
Однако если по какой-то причине у вас на ряду с mananged кодом из C# сборки используется unmanаged, то его отладка будет станет более сложная по сравнению с обычной отладкой unmamanged кода из С++.

6. Язык и Синтаксис

С первого взгляда код С++ и С# очень похож внешне. Но многообразие кода на С++ больше, ведь С++ является одновременно и С и С++ и С++0х и все это вы можете использовать одновременно (конечно, если это поддерживает ваш компилятор).

С# же, это только C#, хотя его синтаксис постоянно расширяется. Код на С#, как правило, выглядит проще и лаконичнее, чем код С++ (хотя это не всегда можно было сказать про первые версии С#). Языковые конструкции С++ и С# очень схожи, однако существенные различия можно найти в деталях.
Если С++ можно упрекнуть за отсутствие «в базе» reflection, позднего связывания и сборки мусора. То С# надо упрекнуть за отсутствие полноценных деструкторов, отсутствие полноценных макросов, достаточно грубую настройку наследования, отсутствие константных методов и членов, отсутствие глобальным методов (процедур), очень ограниченную поддержку шаблонов, список можно продолжать… Однако жить без всего этого вполне можно как в случае С++, так и в случае C#.

Синтаксис С#, пожалуй, можно назвать упрощенной версией С++, таким образом С#, как и любое упрощение, одновременно несет и позитивный и негативный эффекты.

Стоит сказать, что более сложный код часто легче пишется и анализируется, если написан более простым языком. С этой позиции, используя С#, меньше шансов допустить ошибку в принципиально сложном коде и больше шансов написать чистый код, обладая теми же ресурсами. Это может быть полезно при решении достаточно сложных, но не требовательных к производительности задач. Однако при этом большее количество «синтетики» в С# делает меньше оценку производительности кода по его «внешнему виду».

7. Стоимость поддержки

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

8. Риски

Пожалуй, основной риск использования C# — это сильная завязка на Microsoft. Конечно, вряд ли Microsoft куда-то исчезнет в ближайшем будущем, но стоит понимать, что Microsoft — это коммерческая организация, целью которой является извлечение прибыли, а для прибыли нужны продажи своей продукции. Поэтому в интересах Microsoft разворачивать разработку C# и .net так, чтобы это приводило к продажам новой продукции Microsoft. Так что если интересы вашей разработки будут не соответствовать интересам Microsoft, рано или поздно это может привести к проблемам.

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

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

В случае С++ ситуация с низкокачественных кодом несколько лучше, т.к. шансы на выживание у плохого кода ниже, однако панацеей от плохого кода С++ конечно не является.

9. Самодостаточность приложений

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

10. Удобство сборки

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

11. Перспективы

Рассуждения о перспективах это всегда спекуляция. На сегодня и С++ и 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#, вам теперь легче понять, какую программу использовать при написании кода для конкретного приложения, имея в виду его назначение. И проще решить, в какой язык стоит углубляться и какой осваивать в первую очередь!

C или C++: что лучше

Программирование и разработка

Данные являются языками программирования общего назначения. Фактически, C ++ является потомком C, что означает, что у них есть некоторые общие функции. Однако за последние несколько лет C против C ++ стал горячей темой, потому что эти языки программирования начали различать всё больше и больше.

В чём разница между C и C ++? Что ж, C ++ предназначен для обработки сложных задач, которые C не мог выполнить. Например, C ++ предлагает более строгую проверку типов и позволяет использовать больше стилей программирования, чем C.

Кроме того, обнаруживать ошибки и другие проблемы в коде C ++ проще, чем в C, поскольку C не предлагает исключений. Термин «исключение» относится к проблемам, возникающим во время работы программы. В C ++ обработка исключений — это способ отделить часть кода и просмотреть её.

C

Этот язык программирования называется C, потому что он основан на малоизвестном языке B, а название C было буквальной шуткой. Однако это улучшение B привело к созданию совершенно нового языка программирования.

Одно различие между C и C ++ заключается в том, что C — это процедурный язык, поскольку он следует пошаговой процедуре, состоящей из функций. Кроме того, C — это язык низкого уровня, который новичкам сложнее изучить, чем языки высокого уровня, такие как Python или C #.

Другими словами, C предоставляет инструкции для компьютера в нисходящем порядке. Напротив, C ++ является объектно-ориентированным, а не процедурно-ориентированным. Это означает, что C ++ фокусируется на наследовании (когда класс получает свойства и характеристики от другого класса), повторном использовании кода, инкапсуляции и создании объектов.

Программы C обычно высокоскоростные. Что ж, языки программирования, такие как Python, предлагают дополнительные процедуры, которые замедляют их программы. Однако C — это язык, который позволяет разработчикам управлять компьютерным оборудованием вручную. Хотя это преимущество, с точки зрения производительности, это означает, что разработчики C должны предотвращать утечки памяти и выделять память самостоятельно.

Для чего используется C? C в основном участвует в создании операционных систем, языковых компиляторов или интерпретаторов, встроенных систем, микроконтроллеров и т.д. Например, C также очень полезен для машинного обучения. Однако ведущим языком машинного обучения является Python из-за его простоты и удобства использования. Разработка игр также является богатой областью для разработчиков C.

C++

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

  • Для работы они требуют компиляции в каждой операционной системе.
  • Оба поддерживают ручное управление памятью. Они не предлагают сборщиков мусора, которые освобождали бы память от неиспользуемых объектов.
  • Из-за отсутствия дополнительной обработки (например, автоматической сборки мусора) C и C ++ более лёгкие и обеспечивают высокую производительность.
  • Поскольку оба они являются языками программирования общего назначения, их варианты использования очень широки (начиная с создания операционных систем и заканчивая машинным обучением).
  • Оба являются низкоуровневыми языками, что означает, что они ближе к оборудованию и обеспечивают больший контроль над проектами.

Основные различия между C и C ++

Сравнение C ++ и C показывает несколько различий между этими двумя языками программирования:

  • C — это процедурный язык, а C ++ — объектно-ориентированный. Эта функция относится к стилю программирования, которому следуют разработчики. Например, процедурное программирование следует пошаговым инструкциям по функциям, в то время как объектно-ориентированное программирование фокусируется на объектах, наследовании и т.д.
  • C ++ имеет хорошо продуманную обработку исключений (блоки Try и Catch), что упрощает процесс отладки, чем в C. Эта функция особенно полезна для поиска сложных ошибок.
  • В C обработка ошибок происходит с помощью функций.
  • C ++ также поддерживает скрытие информации (тесно связанное с инкапсуляцией).
  • Данные в C ++ более безопасны, чем в C, поскольку C ++ предлагает модификаторы для ограничения доступа пользователей.
  • C ++ поддерживает перегрузку функций, что означает, что функция с тем же именем может быть объявлена ​​для разных целей.
  • В C ++ также используются пространства имён, которые позволяют организовать код в соответствии с желаемой областью действия. Например, сгруппированные объекты могут быть помещены в более узкую область, называемую областью пространства имён. C не поддерживает эту функцию.
  • Специалисты относят C ++ к концепции мультипарадигмы. Несмотря на то, что мы классифицировали C ++ как объектно-ориентированный язык, он также имеет особенности процедурного языка. Следовательно, C ++ более гибкий, чем C, поскольку C следует только процедурной логике.

Таким образом, сравнение синтаксических правил C и C ++ приводит к нескольким важным выводам:

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

Сравнение Objective-C с C ++

Objective-C — это язык программирования общего назначения, который расширяет C с помощью обмена сообщениями в стиле Smalltalk. Это в основном для создания приложений для операционных систем IOS и OS X. Это ещё одна вариация языка программирования C.

Вопрос о Objective-C и C ++ возникает из-за того, что оба они являются объектно-ориентированными языками, которые произошли от C. Вот сравнение этих языков:

  • Objective-C не предлагает множественного наследования, в отличие от C ++.
  • Есть различия в том, как выглядит код C ++ и Objective-C. Например, C ++ использует true и false для bool, а Objective-C работает с YES и NO для BOOL.
  • Objective-C имеет функцию Smalltalk, которая представляет собой парадигму обмена сообщениями, в которой вы передаёте так называемые сообщения объектам через функции или селекторы.
  • В то время как C ++ управляет структурами и классами одинаково, Objective-C рассматривает их совершенно иначе.
  • Objective-C более динамичен, чем статический язык программирования C ++.
  • Теоретически Objective-C работает медленнее, чем C ++, из-за динамической диспетчеризации методов.
  • Objective-C в основном предназначен для создания приложений для продуктов Apple, в то время как C ++ — более разнообразный язык, применяемый во многих областях разработки.

Чему вы должны научиться

Теперь вы можете спросить: что мне изучать: C или C ++? Изучение C ++ сначала может показаться лучшим вариантом, потому что он может предложить больше, чем C. Однако C помогает вам понять, как работает оборудование, особенно ЦП, благодаря простоте этого языка.

Вы познакомитесь с концепцией низкоуровневого программирования, узнаёте об указателях и правильном распределении памяти. Кроме того, у C меньше возможностей, которые нужно будет анализировать новичкам.

Однако решение сначала изучить C или C ++ зависит от того, как вы хотите работать. Фактически нет необходимости изучать C до C ++. Даже если вы начнёте с изучения C ++, вы, вероятно, встретите некоторые похожие элементы в синтаксисе и семантике.

Разработчики, начинающие с C, часто жалуются, что им нужно избавиться от привычек. Которые они приобрели на C, чтобы правильно использовать C ++. Изучение C в первую очередь может заставить разработчиков придерживаться процедурного программирования, не исследуя объектно-ориентированную сторону. Например, если ваша мечта всей жизни — разработка видеоигр, вам лучше сразу начать изучать C ++.

Сравнение производительности

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

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

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

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

Выводы

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

С другой стороны, у нас есть объектно-ориентированный C ++. Который фокусируется на объектах и ​​таких функциях, как наследование или скрытие информации. Кроме того, C ++ позволяет разработчикам также следовать некоторым принципам процедурного программирования.

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

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

Есть ли случаи, когда C лучше C++? [закрыт]

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

Закрыт 6 лет назад .

Здравствуйте. Вопрос из заголовка переписывать не буду.

Интересуют реальные примеры, т.е. не те, когда компилятора C++ под какую-то платформу нет. Различия, в несколько процентов, в производительности, несущественны.

Навеяно "мини-наездом" на C++ на Хабре

UPD: Кроме варианта, что C знаем лучше.

Алексей Лобанов's user avatar

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

Если говорить теоретически, то С имеет одно огромное преимущество перед С++ — простота языка и, как следствие, простота в изучении. С++ сложнее учить, но если его знаешь хорошо, то писать на нем на порядок проще, особенно большие сложные проекты (да и маленькие тоже).

Всем привет, расскажу почему я считаю что Си лучше C++. И почему надмножество над другим языком это не всегда хорошо.

C++ FQA

Язык программирования всегда имеет набор фич. Замечено, что чем меньше фич и чем больше соблюдается ортогональность, тем гибче и выразительнее сам язык, тем легче понимать код.

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

  • функции, указатели: указатели на функции, функция принимающая указатели
  • функции, структуры, указатели: структуры содержащие указатели на функции

Макросы никак не взаимодействуют с другими, это просто препроцессор, поэтому тут всё понятно.

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

Теперь рассмотрим C++: функции, структуры, указатели, макросы, классы, шаблоны, ссылки, исключения, операторы, методы.

Где есть неортогональные пары, которые очень похожи, частично дублируют своё назначение, из-за этого иногда может быть непонятно где какую из двух использовать, код где сталкиваются две фичи может выглядеть криво или быть труднопонятным:

  • указатели и ссылки
  • структуры и классы
  • макросы и шаблоны
  • функции и методы

Количество фич возросло, да ещё и половина из них неортогональна. Из-за этого программисту приходится делать выбор там, где в других языках за него выбрали проектировщики языка. C++ на порядок более сложный язык.

Может быть кто-то скажет: «Ну и фиг что сложный! Я умный, я осилю, я смогу управлять этой мощью!», может и действительно осилит. Я бы избегал любых лишних мысленных телодвижений.

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

Похожие статьи