Какая разница между с и с
Перейти к содержимому

Какая разница между с и с

  • автор:

Какая разница между C, C#, C++?

Какая разница между этими языками ? Где каждый из них применяется больше ? И какой язык лучше учить для новичка ?

  • Вопрос задан более трёх лет назад
  • 26655 просмотров

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

C и C ++ — это два разных языка программирования. Первоначально C был разработан Деннисом Ритчи в AT & T Bell Labs в период с 1969 по 1973 год. C ++ — еще один универсальный язык программирования. Он был разработан с оригинального языка программирования Си. Он был разработан Бьярном Страуструпом в Bell Labs, начиная с 1979 года. C ++ первоначально назывался C with Classes, так как он был основан на C. Он был переименован в C ++ в 1983 году.

C является одним из старейших в настоящее время используемых языков программирования и является одним из наиболее широко используемых языков программирования. Он постоянно использовался в приложениях, которые ранее кодировались на ассемблере. Это включает в себя компьютерную операционную систему UNIX. C также прямо или косвенно влияет на многие более поздние языки программирования, такие как C #, D, Go, Java, JavaScript, Limbo, LPC, Perl, PHP, Python и оболочка C Unix. Несмотря на все эти новые языки, C по-прежнему остается популярным языком программирования.

Изначально C ++ начинался как усовершенствование C. Он был разработан для совместимости исходного кода и ссылок с C. Однако он добавил классы, виртуальные функции, перегрузку операторов, множественное наследование, шаблоны, обработку исключений и т. Д. В конце концов, он разработал достаточно, чтобы считаться языком программирования сам по себе. Первоначально он был ратифицирован в 1998 году как сертифицированный язык программирования ISO / IEC 14882: 1998. Сегодня C ++ сейчас широко используется для проектирования оборудования.

C — это язык программирования общего назначения, в котором точка с запятой (;) используется как терминатор оператора, а также фигурные скобки (<>) для группировки блоков операторов. Он имеет средства для структурного программирования, а его конструкция обеспечивает конструкции, которые могут эффективно отображаться в типичные машинные инструкции. Он также допускает область действия и рекурсию лексических переменных и имеет статическую систему типов, которая предотвращает многие непреднамеренные операции.

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

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

Эти два языка также различаются по способу работы с адресной памятью, ввода-вывода и программирования GUI. Например, C использует функции calloc (), malloc () и free () для выделения и освобождения памяти, в то время как C ++ использует new и delete. C использует scanf () и printf () для ввода и вывода, в то время как C ++ использует операторы cin >> и cout

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

Сравнение между C и C ++:

В чем отличия C++ и C# ?

Доброго времени суток.
Хочу начать программировать, но в самом начале хочу разобраться с языками.
1) Подскажите пожалуйста чем отличаются C++ и C#?
2) Насколько они похожи по синтаксису?
3) Возможно ли изучая например C++ «переключится» на C#, не прибегая к изучению всего языка с 0?
4) Возможна ли разработка под android на этих языках? (Тут, я думаю, следует дать небольшое пояснение. По моей задумке небольшие задачки с программированием под android, для себя, были бы очень полезны. )
5) С какого языка проще начать ?

  • Вопрос задан более трёх лет назад
  • 229173 просмотра

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *