Не говорит & ldquo; C / C ++ & rdquo; неправильно?

Посмотрите на этот и этот вопрос. Также взгляните на интеллектуальные указатели.

23
задан 2 revs, 2 users 100% 11 February 2010 в 02:30
поделиться

16 ответов

Тот, кто задает вопрос, должен писать C, C ++ или C / C ++ в зависимости от вопроса.

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

В конце концов, все зависит от конкретного вопроса. Если кто-то спрашивает, как объединить строки, то очень важно, хочет ли он решения на C или C ++. Или другой пример, если кто-то запрашивает алгоритм qsort. Для поддержки различных типов вы можете использовать макросы с C и шаблоны с C ++ и т. Д.

1
ответ дан Milan Babuškov 11 February 2010 в 02:30
поделиться

Не правильно ли говорить «C / C ++»?

Нет, это не так. Например, международная корпорация Watcom , основанная более 25 лет назад , назвала свой набор компиляторов и инструментов C и C ++ «Watcom C / C ++», и этот продукт все еще разрабатывается и доступен в форме с открытым исходным кодом. как OpenWatcom C / C ++

2
ответ дан dmityugov 11 February 2010 в 02:30
поделиться

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

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

3
ответ дан speeder 11 February 2010 в 02:30
поделиться

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

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

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

4
ответ дан Dan Lenski 11 February 2010 в 02:30
поделиться

Да и нет.

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 выше)
5
ответ дан 3 revs 11 February 2010 в 02:30
поделиться

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

8
ответ дан Alex Jenter 11 February 2010 в 02:30
поделиться

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

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

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

3
ответ дан PhirePhly 11 February 2010 в 02:30
поделиться

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

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

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

31
ответ дан Steve Klabnik 11 February 2010 в 02:30
поделиться

Я склонен ставить C / C ++ в своих вопросах.

Как правило, я ищу что-то, что я могу использовать в своем приложении c ++.

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

0
ответ дан KPexEA 11 February 2010 в 02:30
поделиться

У меня создалось впечатление, что весь код c является допустимым кодом C++.

2
ответ дан epicstruggle 11 February 2010 в 02:30
поделиться

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

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

ответ в шепелявости будет довольно неприменимым. Но ответ или в C или в C++ будет непосредственно применим.

4
ответ дан tfinniga 11 February 2010 в 02:30
поделиться

Если это - сложный вопрос, бывший должный записать больше чем одну функцию, да, это может быть неправильно.

, Если это должно только спросить деталь [приблизительно 110] или побитовая обработка, я думаю, что это может быть законно (последним может даже быть отмеченный C/C ++/Java/C#, я предполагаю...).

1
ответ дан PhiLho 11 February 2010 в 02:30
поделиться

Это было слишком длинно для комментария, таким образом, я должен был сделать его ответом, но это в ответ на ответ B Jeff.

помните, что исходные реализации C++ были просто как предварительный компилятор, которые производят код C для 'реального' компилятора.

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

Помнят, что компиляторы C, которые скомпилировали бы вывод тех компиляторов C++, самостоятельно произведут код ASM, был бы тогда выполняться через ассемблер.

1
ответ дан 2 revs 11 February 2010 в 02:30
поделиться

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

3
ответ дан akalenuk 11 February 2010 в 02:30
поделиться

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

Примечание, что при некоторых обстоятельствах значение из кода может отличаться очень тонкими способами между этими двумя компиляторами, но я предполагаю это правда при некоторых обстоятельствах даже между различными брендами компилятора C++, если Вы достаточно глупы полагаться на неопределенное или contested/non-conformant поведение.

6
ответ дан 2 revs 11 February 2010 в 02:30
поделиться

Помните, что исходные реализации 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++ из-за сильных сходств.

16
ответ дан 2 revs, 2 users 92% 11 February 2010 в 02:30
поделиться