Каковы основные различия между C и C ++ и когда вы выбрали бы одно над другим? - PullRequest
10 голосов
/ 14 января 2009

Для тех из вас, кто имеет опыт работы с обоими, каковы основные различия? Для новичка, который будет лучше учиться? Существуют ли ситуации, когда вы можете выбрать C, а затем другие ситуации, когда вы выбираете C ++? Это случай использования лучшего инструмента для работы или один значительно лучше, чем другой. Я знаю, что C ++ является «улучшением» C, но он был создан в 83 году и не полностью заменил C, поэтому должно быть что-то еще.

Я знаю, что этот вопрос субъективен, и я не пытаюсь начать какую-либо религиозную войну, поэтому, пожалуйста, постарайтесь быть максимально объективным. Ясные сильные и слабые стороны и сравнения.

Ответы [ 7 ]

15 голосов
/ 14 января 2009

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

  • Общее программирование: позволяет писать код один раз и использовать его с различными структурами данных.
  • Мета-программирование: позволяет использовать шаблоны для генерации эффективного кода во время компиляции.
  • Проверка: Позволяет проверять определенные свойства во время компиляции. Какой тип имеет выражение? Сколько параметров имеет функция? Какой тип у каждого есть?
  • Объектно-ориентированное программирование: Позволяет программисту программировать объектно-ориентированные, со сложными функциями, такими как множественное наследование и личное наследование
  • Процедурное программирование: позволяет программисту освобождать функции от любых классов. В сочетании с расширенными функциями, такими как ADL, можно писать чистый код, отделенный от специфики определенных классов.

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

8 голосов
/ 14 января 2009

C ++ на 99% является надмножеством C. Он немного более строг в синтаксисе, с небольшими различиями в изменении условий.

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

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

Что вы теряете, переходя на C ++? В нем отсутствуют некоторые хаки самого низкого уровня, для которых многие люди используют Си. Я не помню ни одного из них, но я никогда не слышал ни одного хорошего аргумента за то, что он заставил компилятор делать то, что вы хотите, кроме как для повышения эффективности на 10%.

6 голосов
/ 14 января 2009

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

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

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

5 голосов
/ 14 января 2009

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

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

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

3 голосов
/ 14 января 2009

Я бы сказал, что в большинстве случаев вам лучше использовать C ++ вместо C. Вам не нужно использовать все сложные функции C ++, если вы не хотите. Есть несколько вещей, которые C ++ добавляет, которые действительно полезны в большинстве случаев:

  • Более сильный набор текста.
  • Класс строк, включенный в стандартную библиотеку.
  • Класс массива (вектор), который растет по мере необходимости и обрабатывает все выделение и освобождение памяти для вас.

Лично я чувствую, что эти три вещи оправдывают использование C ++, даже если вы используете его для написания C-подобного кода (процедурного, не объектно-ориентированного кода).

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

2 голосов
/ 15 января 2009

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

2 голосов
/ 14 января 2009

Для тех из вас, кто имеет опыт работы с обоими, каковы основные различия?

C - это подмножество, C ++ - это надмножество. C ++ включает функции для поддержки объектно-ориентированного программирования (например, «полиморфизм») и многие другие функции.

Для новичка, который будет лучше учиться?

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

Существуют ли ситуации, когда вы можете выбрать C, но в других ситуациях, когда вы выбираете C ++?

Я бы выбрал C вместо C ++ в тех редких, редких ситуациях, когда целевая платформа поддерживает C, но не C ++ (т.е. на некоторых встроенных устройствах).

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