Меня достали фразы в резюме типа «знаю язык C/C++», или попытки рассуждать о С как «всего лишь» подмножестве от С++ — я считаю, что это чудовищная ошибка. И я считаю, что это совершенно разные языки. Нет, правда.
Именно поэтому я решил накропать этот короткий пост, чтобы пользуясь случаем напомнить об этом.
Миф номер 1. Есть такой язык программирования — «С/C++».
Нет такого языка программирования. Языки С и C++ имеют не так много общего. Да, действительно, язык C++ был создан под сильным впечатлением от С, но, повторюсь, несмотря на это, эти два языка — весьма разные.
Миф номер 2. Язык C++ является продолжением развития языка C.
С++ — это попытка создать на базе знакомого всем C язык с развитыми объектно-ориентированными возможностями, не более того.
С++ не является следующей версией языка С — это чушь. Кстати, если и говорить о развитии С, то его следующей версией официально является C1x.
Миф номер 3. Язык C++ обратно совместим с языком C.
В очень общем приближении — да. Даже более того, когда-то, согласен, это звучало здраво, но только не сегодня. Сегодня все эти void pointers и прочая ерунда делают эти языки во многом несовместимыми.
Миф номер 4. Если ты знаешь C++, ты автоматически знаешь и язык C.
Опять же, это полуправда. Ты можешь понимать синтаксис языка, но не будешь классным программистом (см. выше — потому что это всё-таки разные языки).
Язык C имеет очень большое количество ограничений и потенциальных опасностей, и чтобы обходить всё это, нужно иметь опыт программирования именно на нем. У C++ несколько другой подход, и он преодолевает эти ограничения часто по-другому.
2 комментария
Полностью согласен! Сам начинал изучать C++ не зная C и сейчас могу сказать, что я C не знаю - не знаю как применять malloc/calloc/free, в C++ есть new/delete. Не знаю всех аргументов printf, т.к. в C++ есть cout. Не применяю #define. т.к. в C++ есть const, и т.д.
Особенно удивляют люди, которые утверждают, что чтобы изучить C++ нужно предварительно изучить C.
С 2 и 4 соглашусь, но не более того.
А 1 и 3 по сути повторяют друг друга.
Сравнение языков в 1-м пункте просто огонь.
Про C - не объекто-ориентированный, не поддерживает ссылки и структуры это еще нормально.
Используется scanf и printf для вывода - вот прямо очень характерная особенность языка. 6-й пункт это следствие того, что C не объекто-ориентированный. Отсутствие inline-функций, кхм, скорее всего для большего контроля за языком. Способ разбора и ядро и так очевидно.
Про C++. Уже 2-й пункт. Хотя бы одна функция(main), да и содержится в каждой программе. 3-й пункт классы и объекты (может тогда просто объекты). 5-й пункт способ вывода на консоль (про потоки хоть бы написал, но в сравнении языков как таковых потоки не существенны). 10-й пункт следует из первого, хотя можно и писать прям как на C.
В том списке деталей отличия мелкие - cpp представлен только как расширение.
C++ это надстройка над С. Очень измененная и расширяющая базовые функции.
Замена void* на cast'ы увеличивает скорость компиляции и уменьшает количество ошибок в коде в связи с некорректным приведением (только dynamic_cast это специальное требование для c++).
>чтобы изучить C++ нужно предварительно изучить C.
На C нужно хоть что-то написать, подумать куда указывают указатели, и почему на нем писать такой геморрой. Через эти знания приходишь к пониманию объектов и подхода C++.
>в C++ есть new/delete
в C++ есть умные указатели раз на то пошло.
> в C++ есть const
в C тоже есть const, только немного отличается в применении