Подтвердить что ты не робот

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

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

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

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

Верно, что некоторые вопросы могут рассматриваться как C или С++, во всяком случае. Что вы думаете об этом?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

Да и нет.

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

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

Итак, я вижу элемент "C/С++", обозначающий как "пересечение C и С++" или "знакомство с программированием на C, а также программирование на С++" , в зависимости от контекста.

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

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

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

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

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

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

: -)

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

  • описывающий пересечение C и С++
  • описывающий знакомство с программированием на C, а также программирование на С++
  • описание совместимого кода

Но это не относится к:

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

Ответ 6

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

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

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

Ответ 7

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

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

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

Ответ 8

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

Ответ 9

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

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

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

Ответ 10

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

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

Ответ 11

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

Ответ 12

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

Нет, это не так. Например, Watcom International Corporation, основанная более 25 лет назад, называется их набором компиляторов C и С++ и инструментов "Watcom C/С++", и этот продукт по-прежнему разрабатывается и доступен в форме с открытым исходным кодом как OpenWatcom C/С++

Ответ 13

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

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

Ответ 14

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

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

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

Ответ 15

Это слишком долго для комментария, поэтому я должен был дать ему ответ, но он ответил на ответ Джеффа.

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

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

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

Ответ 16

Я, как правило, ставил C/С++ в своих вопросах.

Обычно я ищу что-то, что я могу использовать в своем приложении С++.

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

Ответ 17

Не только эти два языка разные, но и разные подходы. С++ - язык OO, а C - процедурный язык.

Нужно ли упоминать шаблоны?

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