Какая разница между C, C#, C++?
Какая разница между этими языками ? Где каждый из них применяется больше ? И какой язык лучше учить для новичка ?
- Вопрос задан более трёх лет назад
- 28897 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 7
Дмитрий Ковальский @dmitryKovalskiy
программист средней руки
Разница в количестве плюсиков. У первого -0 , у второго — 4, у третьего — 2. Новичку лучше учить C++. А если серьезно : С- язык низкого уровня для системного программирования, драйверов и другой низкоуровневой разработки. С++ — тоже самое с обвесами из классов, перегрузок, шаблонами и некоторыми другими фичами. С# — ООП язык для разработки под .NET — Microsoft-стек технологий для разработки самых разных приложений.
Ответ написан более трёх лет назад
Комментировать
Нравится 16 Комментировать
Какая разница между этими языками ?
Язык C — это язык, которому 40 лет, на нём очень много программ написано, поэтому сталкиваться с ним в мире компьютеров ты будешь постоянно.
Язык C++ — это язык, созданный лишь с одной целью, — прославить своего автора так же, как C прославил своего. Поэтому он всё время противопоставляется C, при этом явно до него не дотягивая.
Тут тебе и каша-малаша в приоритетах операций, и запутанный синтаксис (иногда чрезмерно удлинённый или в стиле масла масляного), множество введённых ключевых слов, убивающих любой язык, и вечная недоделанность встроенных типов данных (стек или очередь, которые обязательно надо дописывать, прежде чем пользоваться).
Но ему тоже много лет (лет на 15 он младше C), да и производительность сохранилась на сишном уровне, поэтому кода тоже много и есть многие вещи, которых нет для C.
Язык C# — это язык, созданный лишь с двумя целями, — выпнуть Java с рынка и максимально пришпилить программистов к Windows, чтобы они никуда не могли с неё уйти и были вынуждены ставить сегодняшние индусские обновления для десятки.
Сам язык хороший, в нём всё есть, но его политическая направленность заставляет софт работать для Microsoft, а они обычно бесплатно ничего не делают и целенаправленно создают проблемы из воздуха.
Резюмируя вышесказанное, хорошо спроектированные языки — это C и C#, но C — минималистичный и удобный для подготовки к ассемблеру (а это тоже придётся узнать с вероятностью 100%), а C# — полон всех новшеств, но подходит для перехода на другой хороший язык.
А программировать надо в Linux, там всё для этого есть.
C или C++?
Существуют два диаметрально противоположенных, но одинаково распространенных мнения, которые можно выразить как «C++ это C с классами» и «C++ и C — разные языки программирования». В общем-то, не важно, какого мнения придерживаться, но интересно иное — в каких случаях какой из этих языков (или вариантов языка) предпочтительнее.
При этом я не хочу начинать сравнение объектно-ориентированного и структурного подходов к созданию программного обеспечения, потому что очень часто в подобных дискуссиях можно услышать фразу вида «недостаточная объектно-ориентированность языка программирования», а она, на мой взгляд, неверна: при проектировании системы «объектно-ориентированность языка программирования» важной роли не играет — «объектно-ориентированно» программировать можно практически на любом языке программирования. Другое дело, что дополнительные средства языка, поддерживающие создание и использование объектов, сокращают количество соответствующих строчек кода и уменьшают вероятность ошибок, но в идеале это не важно.
Кардинальная разница между C и C++ не в классах или шаблонах по отдельности, а в общей идеологии: C позволяет программистам максимально контролировать (для языка программирования высокого уровня) программу, а C++ идет по пути усложнения компилятора, чтобы позволить программисту писать программу как ему будет «удобно». При этом, опять же, в идеальном случае, компилятор языка поймет желание программиста и полученный код будет все равно максимально эффективным (или близким к эффективному). С одной стороны, подход C++, не может не вызвать интереса и одобрения, так как дает возможность создания эффективных программ не снижая при этом их читабельность или удобство наращивания. Но с другой стороны — повышение сложности компилятора сопряжено с различными трудностями, многие из которых до сих пор не преодолены.
Когда я только начинал изучать C++ (это было, наверное, лет 6-7 тому назад), я был удивлен большому количеству резко отрицательных мнений о нем у профессиональных программистов. Тогда мне это было непонятно, что, в общем, неудивительно: Бьерн Страуструп не только пошел по пути усложнения компилятора, но и по пути усложнения языка программирования, так что изучение C++ это очень долгосрочный процесс и, наверное, на сегодняшний день это самый сложный язык программирования. А так как противопоставить что-либо языку программирования можно только после того, как придет понимание основных идей и большинства конструкций языка, а так же после выполнения крупных проектов на нем, то и время детского воодушевления и радости при виде мощного инструмента (каким является C++) значительно больше, чем у других языков программирования.
Несмотря на то, что за эти 7 лет C++ прошел достаточно большой путь и сильно изменился, мне кажется что источник тех нареканий, которые имеют смысл, остался. Хочется отметить, что есть большое количество нареканий относительно бесcмысленных, на мой взгляд, таких как уже упомянутый странный термин «малая объектно-ориентированность». Очень часто можно услышать, что «C++ это не Smalltalk». Странное суждение: если программисту больше нравится Smalltalk, то на нем и надо программировать.
Корень же большинства бед, связанных с C++, кроется как раз в усложнении компилятора (несмотря на то, что выше это усложнение преподносилось в качестве преимущества): чем сложнее программа (в данном случае, компилятор), тем больше вероятность того, что в ней будет ошибка.
На самом деле, конечно же, если программа перестает работать, то жаловаться на инструмент разработки надо в последнюю очередь, а сначала следует попытаться найти ошибку в своем исходном коде. Но чем больше становится программа, чем сильнее она разрастается, тем все больше и больше вероятность того, что ошибка в компиляторе скажется на работе вашей программы. Это было бы еще полбеды и особенности «своего» компилятора программисту следует знать, но компиляторов C++ достаточно много и каждый из них обладает своими собственными достоинствами и недостатками, результатом которых может стать невозможность сборки проекта под какой-либо средой программирования, отличной от первоначальной. Я не имею в виду сложность написания универсально переносимых программ, работающих под любой операционной системой, совсем нет. Просто так как написать компилятор C проще, чем C++, и так как сам язык программирования C имеет меньшее количество скользких мест, чем C++, то два разных компилятора C (разных производителей) будут больше похожи друг на друга по поведению, чем два компилятора C++.
Кроме компилятора, большую сложность при программировании на C++ вызывает использование STL. Несомненно, библиотека шаблонов очень удобна и полезна, но это в идеале. К примеру, очень часты случаи, когда смена поставляемой с компилятором STL на STLport, приводит к тому, что программа начинает работать стабильнее.
Конечно же, проблемы, связанные с ошибками в компиляторах, проявляются очень редко. Собственно поэтому можно уже сейчас оценить круг задач, которые лучше решать при помощи C++, чем C (при наличии, конечно же, хороших навыков программирования в обоих языках): это практически все программы, от которых не требуется беспрерывная работа 24 часа в сутки. Очень неприятно обнаружить, что программа, которая писалась и отлаживалась на каких-то тестовых примерах, не может выдержать реальной нагрузки и проблема кроется именно в том, что где-то глубоко внутри библиотеки, поставляемой с компилятором, не был реализован механизм блокировки доступа к разделяемому ресурсу. Кроме того, обычно переносимость программы с одного компилятора на другой уменьшает количество используемых возможностей языка программирования, потому что разные компиляторы, как это ни смешно звучит, по разному «соответствуют стандарту». Или, точнее, не соответствуют ему. А подобное ограничение на конструкции языка (одно из самых обидных лишений, конечно же, ограничение на использование шаблонов) сводит на нет большинство преимуществ C++.
В таких случаях выбор языка программирования C вместо C++ более предпочтителен, так как даст возможность изначально уменьшить количество непонятных проблем, возникающих в реальной эксплуатации программного продукта.
При этом стоит отметить потенциальную опасность C, который традиционно позволяет программисту делать все что угодно, зачастую пропуская его ошибки. Но эти ошибки выловить иногда значительно легче, чем объяснять различные странности, появляющиеся то тут, то там в программах на C++.
Более строго, можно сказать, что обычно к разрабатываемому программному обеспечению предъявляются какие-то требования, связанные с его качеством. Эти требования не могут быть настолько жесткими, чтобы совсем исключать вероятность наличия ошибок в программе, но чем они сильнее, тем лучше использовать старый и проверенный во многих разработках C. В остальных же проектах может быть обратная ситуация: сложность разработки на C вызовет увеличение сроков, связанное с отладкой и выявлением ошибок в коде у самих программистов. Но, повторюсь, подобные ошибки обнаружить проще, чем ошибки в компиляторе или стандартной библиотеке.
Резюме
Подводя итоги, хочется сказать что в последнее время я начал относиться с большой осторожностью к использованию С++ в проектах. Мне кажется, что должно пройти еще достаточно много времени, чтобы C++ достиг той устойчивости и стабильности в использовании, при которой он будет подходить по своим характеристикам для почти всех разработок, но до этой поры C остается вполне достойной альтернативой ему.
C# против C++: разница между ними
C++ — это язык компьютерного программирования, который содержит функцию C programming language а также Simula67 (первый объектно-ориентированный язык). В C++ появилась концепция классов и объектов.
Он инкапсулирует возможности языка высокого и низкого уровня. Таким образом, он рассматривается как язык среднего уровня. Раньше он назывался «С с классами», так как обладал всеми свойствами языка Си.
Что такое C #?
до-диез — объектно-ориентированный язык программирования, разработанный Microsoft который работает на .Net Framework. Он имеет такие функции, как strong типизация, императивное, декларативное, объектно-ориентированное (на основе классов) и компонентно-ориентированное программирование. Он был разработан Microsoft на платформе .NET.
Название «до-диез» было навеяно нотными обозначениями. Здесь символ «#» указывает на то, что написанная нота должна быть сделана на полтона выше по высоте.
История C ++
C + + Язык был разработан Бьярном Страуструпом из AT&T Bell Laboratories. Страуструп был такимtronг сторонник C поклонник Simula67. Он хотел объединить лучшее из обоих языков. Он стремился создать язык, который поддерживает функции объектно-ориентированного программирования и при этом сохраняет мощь C. В результате появился C++.
История С#
Андерс Хейлсберг — ключевой участник разработки языка C#. В 1999 году он собрал команду для разработки нового языка, который тогда назывался «Cool». Проект был одобрен и анонсирован в июле 2000 года на конференции разработчиков .Net. Язык был later переименован в C#.
Принципы разработки на C++
- Программа должна быть простой, объектно-ориентированной и понятной.
- Разработка должна проводиться в надежной и безопасной среде.
- Код должен соответствовать конкретным archiтектуры и должны быть портативными.
- Код должен быть легко «интерпретируемым и динамичным».
Принципы разработки на C#
- Он должен быть простым, современным, универсальным, объектно-ориентированным. язык программирования.
- Язык и реализации должны обеспечивать поддержку разработка программного обеспечения Принципы
- C# — идеальный выбор для создания приложений как для размещенных, так и для встроенных систем.
Теперь в этом уроке C# и C++ давайте разберемся в ключевых различиях между C Sharp и C++.
Разница между C ++ и C #
Фоллоwing это основное различие между C# и C++:
Параметр | C + + | C# |
---|---|---|
Тип языка | C++ — это низкоуровневый и платформенно-нейтральный язык программирования. | C# — это язык высокого уровня. |
составление | C++ компилируется в машинный код | C# «компилируется» в CLR (Common Language Runtime), который интерпретируется JIT в ASP.NET. |
Управление памятью | В C++ вам необходимо управлять памятью вручную, если вы динамически выделяете объект. | C# автоматически запускает управление памятью |
Множественное наследование | C++ поддерживает множественное наследование | C# не поддерживает множественное наследование. |
Уровень сложности | C++ включает в себя больше возможностейplex особенности. | В C# нет complex функции. Он имеет простую иерархию и его довольно легко понять. |
Спецификатор доступа по умолчанию | Public в C++ для Struct. Частный для занятий | Частное в C# .net. |
Платформа | C++ — это язык, который работает на самых разных платформах. Он также одинаково популярен в системах Unix и Linux. | C#, хотя и стандартизирован, редко встречается за пределами windows. |
Автономные приложения | C++ позволяет создавать автономные приложения. | C# не может создать отдельное приложение. |
Объектно-ориентированный | C++ не является полностью объектно-ориентированным языком. | C# — чистый объектно-ориентированный язык. |
Связанная проверка | Не поддерживает связанную проверку массивов. | Поддерживает связанную проверку массивов. |
Вывоз мусора | C++ не поддерживает сборку мусора. | C# поддерживает сборку мусора. |
Множественное наследование | C++ поддерживает множественное наследование. | C# не предлагает множественное наследование классов. |
Цикл Foreach | Старая версия C++ не поддерживает каждый цикл. (на основе диапазона цикл for в C++ добавлен начиная с C++ 11) | C# поддерживает каждый цикл. |
Использование указателей | Вы можете использовать указатели в любом месте программы. | Вы можете использовать указатель только в небезопасном режиме. |
Используется для | Широко используется в играх. | Программирование на C# можно использовать для создания Windows, мобильные и консольные приложения. |
Размер двоичных файлов | C++ гораздо более легкий. | В C# много накладных расходов, и перед компиляцией необходимо подключить библиотеки. |
Тип проектов | Программисты C++ обычно сосредотачиваются на приложениях, которые работают напрямую с оборудованием или которым требуется более высокая производительность, чем могут предложить другие языки. | C# используется для разработки современных приложений. |
Предупреждения компилятора | C++ позволяет вам делать практически все, если синтаксис правильный. Таким образом, это гибкий язык, но вы можете нанести серьезный ущерб работающей ОС. | C# имеет высокий уровень защиты. поскольку компилятор будет выдавать ошибки и предупреждения в случае, если вы случайно напишете код, который может привести к повреждению. |
Результат компиляции | После компиляции код C++ преобразуется в машинный код. | После компиляции код C# преобразуется в код промежуточного языка. |
Смена оператора | В операторе переключения C++ тестовая переменная не может быть строкой. | В инструкции переключения C# может быть строкой, а может и не быть. |
- Динамическое распределение памяти в C с использованием функций malloc(), calloc()
- Приведение типов в C: преобразование типов, неявное, явное с примером
- Учебное пособие по программированию на C в формате PDF для начинающих
- 13 ЛУЧШИХ книг по программированию на C для начинающих (обновление 2024 г.)
- Разница между C и Java
- Разница между структурой и объединением в C
- 100 лучших вопросов и ответов на интервью по программированию на языке C (PDF)
- Функция calloc() в библиотеке C с ПРИМЕРОМ программы
В чем отличия C++ и C# ?
Доброго времени суток.
Хочу начать программировать, но в самом начале хочу разобраться с языками.
1) Подскажите пожалуйста чем отличаются C++ и C#?
2) Насколько они похожи по синтаксису?
3) Возможно ли изучая например C++ «переключится» на C#, не прибегая к изучению всего языка с 0?
4) Возможна ли разработка под android на этих языках? (Тут, я думаю, следует дать небольшое пояснение. По моей задумке небольшие задачки с программированием под android, для себя, были бы очень полезны. )
5) С какого языка проще начать ?
- Вопрос задан более трёх лет назад
- 236425 просмотров
Комментировать
Решения вопроса 1
Deerenaros @Deerenaros
Программист, математик, задрот и даже чуть инженер
Тут все пишут про отличия. Рискну написать про сходства.
Во-первых, о чём бы ни писала Елена и Си++ и C# — оба языки общего назначения. Даже больше, оказывается — C# ни разу не заточён под объёмную библиотеку (или фреймворк) .NET, однако с ним намного, много проще. Но если таки учитывать .NET, то для Си++ есть Boost и Qt, так что здесь скорее паритет — библиотек для обоих хватает.
Во-вторых, сложность разработки на Си++ часто преувеличена. Разве только дисциплины надо поболее — выстрелить в ногу здесь попроще. Однако при этом Си++ будет чутка более гибкий и без танцев с бубнами unmanaged код не запустить на C#. Если внезапно потребуется.
В-третьих, оба языка, раз они общего назначения, таки мультипарадигмальные. То есть они реализуют большинство практик. И хотя Си++ развивается довольно медленно, сейчас Си++ резко догнал C# в плане нереализованных фич (здесь как минимум лямбды). Ну и метапрограммирования у Си++ поболее будет (наглая ложь).
В-четвёртых, оба языка кроссплатформеные. Впрочем, C# будет более кроссплатформенный, чем Си++. Разве только тот же Qt резко стёр границы, но это не значит почти ничего — C# компилируется в тот же самый CIL для всех платформ, Си++ — в совершенно разный код для разных платформ (i386, amd64, ARM Cortex-AXX).
Наконец, в пятых, синтаксис у них действительно очень похож. Оба языка принадлежат к семейству Алгол-подобных, так что и брейсы, и остальные скобки здесь имеют примерно одно предназначение.
Различия, которые казалось бы делают языки совершенно разными, таки не столь принципиальны на том уровне абстракции, на котором был задан вопрос. А различия действительно колоссальны: C# — managed код, что означает, что скомпилированный код будет исполнятся не на прямую в CPU, а на специальной виртуальной машине. Это съедает производительность, но сильно облегчает перенос кода. Ну и потом, C# — полупроприетарный ответ Java (что интересно, так как получается, что C# — более свободный, чем Java), которая была создана как замена сложному и небезопасному C++ в том числе.
В общем, как человек, который начал давно с C#, продолжив C++ и по пути изучив Python, Java, D и другую ООП-чушь могу с уверенностью сказать, что разницы в общем-то и нет. То есть придётся немного проникнуться в чуть другую философию и выяснить, какие проблемы более новый язык пытался решить. Но если подходить к этому, как подошёл lookid, то это скорее не как изучать языки одной языковой группы, а как изучать один и тот же язык в разное время или в разных сферах.
Почему так? Потому что ООП. Оно как бы ООП, ничего сверхъестесственного ни один язык не предлагает, это не Haskell, и тем более не Brainfuck. Так что принципиально общие вещи в них будут. То подмножество, что реализует машину Тьюринга — у них общие. Сами посмотрите: циклы, ветвления, передача аргументов, арифметика. С небольшими правками всё совершенно одинаковое. Да, Дмитрий совершенно прав, traits на C# не повторишь, ибо та аналогия будет уже не traits, однако. Это уже [programming_language] related, то есть это попытка совладать с особенностями.
Немного пруфов: лично я ходящий пруф. Зная C++ и C# и немного Java я просто начал программировать на Python. При том, что Python даже алголоподобным не принадлежит. А всё потому, что логика одна и та же, хотя различий между Python и C(++|#) намного, много больше. Но не читая почти никаких туториалов, пройдясь галопом по европам с документацией сейчас я знаю python достаточно для серьёзного проекта.
UPD. По поводу метапрограммирования. Таки рантайм рефлекшн шарпа тащит. И хотя ни макросов, ни шаблонов, ничего. Но изменять код на лету — это уже очень круто. По дефолту плюсы так не умеют, и хотя шаблоны с макросами тащат, сильно, очень сильно тащат и вытаскивают его, Си++, со дна, надо признать — рефлешн у шарпа будет поинтереснее. Извиняюсь за дезу.