Тот, кто задает вопрос, должен писать C, C ++ или C / C ++ в зависимости от вопроса.
Из того, что я видел, вы можете написать код C ++ способом C или способом C ++ . Оба работают, но код C ++, который не написан в стиле C, обычно легче поддерживать в долгосрочной перспективе.
В конце концов, все зависит от конкретного вопроса. Если кто-то спрашивает, как объединить строки, то очень важно, хочет ли он решения на C или C ++. Или другой пример, если кто-то запрашивает алгоритм qsort. Для поддержки различных типов вы можете использовать макросы с C и шаблоны с C ++ и т. Д.
Не правильно ли говорить «C / C ++»?
Нет, это не так. Например, международная корпорация Watcom , основанная более 25 лет назад , назвала свой набор компиляторов и инструментов C и C ++ «Watcom C / C ++», и этот продукт все еще разрабатывается и доступен в форме с открытым исходным кодом. как OpenWatcom C / C ++
Я использую этот термин сам, и это потому, что это мой стиль, я не использую boost, stl или некоторые другие вещи, даже не стандартные библиотеки C ++, такие как «cout» и «cin», я программирую на C, но использование классов, шаблонов и других (не библиотечных) функций для моего преимущества.
Я могу сказать, что я не мастер C, не мастер C ++, но я действительно хорош в этом конкретном стиле, который я использую с 10 лет назад. (и я все еще поправляюсь!)
Да, C / C ++ довольно бесполезен. Похоже, этот термин чаще всего используется новичками в C ++. Мы, мошенники, работающие только на C, просто говорим «C», а опытные люди на C ++ знают, насколько он отличается от C, и поэтому они правильно говорят «C ++».
Даже если C (почти) является подмножеством C ++, это не имеет никакого отношения к их фактическому использованию. Практически каждая интересная функция C не одобряется в современном коде C ++: указатели на C (вместо этого используйте итераторы / умные указатели / ссылки), макросы (вместо этого используйте шаблоны и встроенные функции), stdio (вместо этого используйте iostreams) и т. Д.
Итак, как выразился Алекс Джентер, маловероятно, что кто-либо, кто хорошо знает какой-либо язык, скажет C / C ++. Сказать, что вы знаете, как программировать на «C / C ++», все равно, что сказать, что вы знаете, как программировать на «Perl / PHP» ... уверен, что у них есть существенное сходство, но различия в том, как они на самом деле используются, огромны .
Да и нет.
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 ++», обычно есть хороший шанс, что он действительно не знает ни того, ни другого;)
Я согласен. Я прочитал RSS-тэг C-тэга и вижу множество вопросов по C ++, которые на самом деле не имеют никакого отношения к C.
Я также часто вижу этот обмен:
Аскер: Как вы делаете это в C?
Ответ: Используйте библиотеку X для C ++.
Аскер: Хорошо, а как насчет того, чтобы кто-то действительно ответил на мой вопрос в Си?
C / C ++ является несдержанным с первых дней C ++, где они были намного более похожи, чем они были сегодня. Поначалу это не так уж и неправильно, но становится все больше и больше.
Базовая структура достаточно схожа, поэтому большинство простых вопросов все же работают между ними. На эту тему есть целая статья в Википедии: http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
Самая большая ошибка, которая возникает из-за того, что кто-то хорошо разбираются в C, они будут одинаково хороши в C ++.
Я склонен ставить C / C ++ в своих вопросах.
Как правило, я ищу что-то, что я могу использовать в своем приложении c ++.
Если код написан на C или C ++, я могу его использовать, поэтому я бы предпочел не просто ограничивать возможные ответы одним или другим.
У меня создалось впечатление, что весь код c является допустимым кодом C++.
Я думаю, что это - больше второго ответа - они хотят что-то, что это легко интегрируется в их проект.
, В то время как ответ C не может быть идиоматическим C++ (и наоборот), я думаю, что это - одно из привлекательных для покупателя качеств C++ - можно в основном встроить C в него. Если идиоматический ответ важен, они могут всегда определять C/C ++/C ++ с STL/C++ с повышением/и т.д.
ответ в шепелявости будет довольно неприменимым. Но ответ или в C или в C++ будет непосредственно применим.
Если это - сложный вопрос, бывший должный записать больше чем одну функцию, да, это может быть неправильно.
, Если это должно только спросить деталь [приблизительно 110] или побитовая обработка, я думаю, что это может быть законно (последним может даже быть отмеченный C/C ++/Java/C#, я предполагаю...).
Это было слишком длинно для комментария, таким образом, я должен был сделать его ответом, но это в ответ на ответ B Jeff.
помните, что исходные реализации C++ были просто как предварительный компилятор, которые производят код C для 'реального' компилятора.
у меня есть друг (кто пишет компиляторы C++ - да, множественное число), кто обижался бы к Вашему первому предложению. Компилятор, объектный код которого является исходным кодом C, является столь же очень компилятором как любым другим. Сущность компилятора - то, что он понимает, что синтаксис языка, и генерирует новый код на основе этого. Препроцессор не знает о языке и просто переформатировал свой вход.
Помнят, что компиляторы C, которые скомпилировали бы вывод тех компиляторов C++, самостоятельно произведут код ASM, был бы тогда выполняться через ассемблер.
C/C++ часто означает стиль программирования, который похож на C и классы, или C и STL:-) Technicaly, это - C++, но минимум его преимуществ используется.
Эти два языка отличны, но они имеют много общего. Много кода C скомпилировало бы очень хорошо на компиляторе C++. На раннем студенческом уровне много кода C++ все еще работало бы над компилятором C.
Примечание, что при некоторых обстоятельствах значение из кода может отличаться очень тонкими способами между этими двумя компиляторами, но я предполагаю это правда при некоторых обстоятельствах даже между различными брендами компилятора C++, если Вы достаточно глупы полагаться на неопределенное или contested/non-conformant поведение.
Помните, что исходные реализации 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++ из-за сильных сходств.