Разве не сказано "C / C ++" неправильно? - PullRequest
23 голосов
/ 07 октября 2008

Я видел много вопросов, которые неправильно используют выражение «C / C ++». Причины на мой взгляд:

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

Хотя C / C ++ иногда можно интерпретировать как «либо C, либо C ++», я думаю, что это большая ошибка. C и C ++ предлагают разные подходы к программированию, и даже если код C можно легко внедрить в программы на C ++, я думаю, что ссылаться на два разных языка с этим единственным выражением (C / C ++) неправильно.

Это правда, что в любом случае некоторые вопросы можно рассматривать как вопросы C или C ++. Что вы думаете об этом?

Ответы [ 17 ]

31 голосов
/ 07 октября 2008

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

Базовая структура достаточно схожа, поэтому большинство простых вопросов все же работают между ними. На эту тему есть целая статья в Википедии: http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B

Самая большая ошибка, которая возникает из-за этого, состоит в том, что, поскольку кто-то хорошо разбирается в C, он будет одинаково хорош в C ++.

16 голосов
/ 07 октября 2008

Пожалуйста, помните, что исходные реализации C ++ были просто прекомпилятором, который выводил код C для «настоящего» компилятора. Все концепции C ++ могут быть закодированы вручную (но не навязаны компилятором) на простом языке C.

«C / C ++» также действителен при обращении к компиляторам и другим языковым / программным инструментам. Практически каждый доступный компилятор C ++ будет компилироваться либо - и поэтому называются компиляторами "C / C ++". В большинстве из них есть варианты, относиться ли к файлам .C и .CPP на основе расширения или компилировать их все как C или все как C ++.

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

Многие инструменты языка / программирования, созданные для C ++, также работают на C, поскольку синтаксис языка практически идентичен. Многие языковые инструменты имеют отдельные версии Java, C #, Python - но у них есть одна версия "C / C ++", которая работает для C и C ++ из-за сильного сходства.

8 голосов
/ 07 октября 2008

Мы в нашей компании обратили внимание на следующий любопытный факт: если соискатель пишет в своем резюме о «продвинутых знаниях C / C ++», обычно есть большая вероятность, что он действительно не знает ни того, ни другого;)

6 голосов
/ 07 октября 2008

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

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

5 голосов
/ 07 октября 2008

Да и нет.

C и C ++ имеют много общего (на самом деле, большинство C - это подмножество C ++).

Но C более ориентирован на «императивное программирование», тогда как C ++, в дополнение к парадигме C, имеет больше легкодоступных парадигм, таких как функциональное программирование, универсальное программирование, объектно-ориентированное программирование, метапрограммирование.

Таким образом, я вижу элемент «C / C ++», который говорит либо как «пересечение C и C ++», либо как «знакомство с программированием на C, а также программированием на C ++» , в зависимости от контекста.

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

Таким образом, если вы хотите увидеть, как далеко C от C ++ в выражении "C / C ++", хорошим сравнением будут учебники GTK + C, и то же самое в C ++ (GTKmm):

C: GTK + Hello World: http://library.gnome.org/devel/gtk-tutorial/stable/c39.html#SEC-HELLOWORLD

C ++: GTKmm Hello World: http://www.gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/sec-helloworld.html

Чтение этих источников весьма поучительно, поскольку, насколько я их разобрал, они производят абсолютно одинаковые, "одинаковые" пути (в отношении языков).

Таким образом, я полагаю, что «выражение» C / C ++ вполне может быть выражено сравнением этих источников.

: -)

Вывод из всего этого заключается в том, что все в порядке, если используется в следующих контекстах:

  • описание пересечения C и C ++
  • описание знакомства с программированием на C, а также с программированием на C ++
  • описание совместимого кода

Но это было бы не для:

  • оправдание соблюдения кода в подмножестве C ++ (или C) для конфетной совместимости с C (или C ++), когда совместимость нежелательна (а в большинстве проектов C ++ это нежелательно, поскольку весьма ограничивает).
  • утверждение, что C и C ++ могут / должны быть закодированы одинаково (как НЕ показано в примере GTK + / GTKmm выше)
4 голосов
/ 07 октября 2008

Я думаю, что это скорее второй ответ - они хотят что-то, что легко интегрируется в их проект.

Хотя ответ C может не быть идиоматическим C ++ (и наоборот), я думаю, что это один из главных преимуществ C ++ - вы можете в основном встроить C в него. Если идиоматический ответ важен, они всегда могут указать C / C ++ / C ++ с STL / C ++ с boost / etc.

Ответ на lisp будет довольно непригодным. Но ответ на C или C ++ будет непосредственно применим.

4 голосов
/ 08 октября 2008

Да, C / C ++ довольно бесполезен. Похоже, этот термин чаще всего используется новичками в C ++. Мы, мошенники, работающие только на C, просто говорим «C», и опытные люди на C ++ знают, насколько он отличается от C, и поэтому они правильно говорят «C ++».

Даже если C (почти) является подмножеством C ++, это не имеет никакого отношения к их фактическому использованию. Практически каждая интересная особенность C не одобряется в современном коде C ++: Указатели на C (вместо этого используйте итераторы / умные указатели / ссылки), макросы (вместо этого используйте шаблоны и встроенные функции), stdio (вместо этого используйте iostreams) и т. Д. И т. Д.

Итак, как выразился Алекс Джентер, вряд ли кто-то, кто хорошо знает какой-либо язык, скажет C / C ++. Сказать, что вы знаете, как программировать на «C / C ++», все равно, что сказать, что вы знаете, как программировать на «Perl / PHP» ... уверен, что у них есть существенное сходство, но различия в том, как они фактически используются, огромны .

3 голосов
/ 08 октября 2008

Я согласен. Я прочитал RSS-канал с тегом C и вижу множество вопросов по C ++, которые на самом деле не имеют ничего общего с C.

Я также вижу этот обмен много:

Аскер: Как ты это делаешь в C?
Ответ: Используйте библиотеку X для C ++.
Аскер: Хорошо, как насчет того, чтобы кто-то на самом деле ответил на мой вопрос в C?

3 голосов
/ 11 февраля 2010

Я использую этот термин сам, и это потому, что это мой стиль, я не использую boost, stl или некоторые другие вещи, даже не стандартные библиотеки C ++, такие как "cout" и "cin", я программирую на C, но использование классов, шаблонов и других (не библиотечных) функций для моего преимущества.

Я могу сказать, что я не мастер C, не мастер C ++, но я действительно хорош в этом конкретном стиле, который я использую с 10 лет назад. (а я все еще поправляюсь!)

3 голосов
/ 07 октября 2008

C / C ++ часто означает стиль программирования, подобный C и классам, или C и STL :-) С технической точки зрения это C ++, но используется минимум его преимуществ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...