Для приложения реального времени, которое является лучшим C или C++?

Я - инженер-электроник с опытом и с языком C и с C++ (я записал с C для микроконтроллера, и с C++ я записал для Windows с Разработчиком Borland C++),

Моя компания разрабатывает продукты блока управления приводом, и мы работаем с STM32 и компилятором IAR.

Я распознаю технические различия между языками, я интересую побережьем разработки и стоимостью обслуживания кода:

  1. Время разработки написания кода C++, длиннее затем C?
  2. Стоимость обслуживания кода C++, является более дешевым затем C? (Я знаю, что всегда будут изменения в коде),
  3. Действительно ли это легко к коду документов в C++ против C? (Документы, которые описывают, как код работает),
6
задан OneOfOne 20 December 2009 в 09:11
поделиться

11 ответов

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

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

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

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

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

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

17
ответ дан 8 December 2019 в 02:16
поделиться

Время разработки написания C ++ код длиннее, чем C?

Это будет полностью зависеть от ваших программистов. Они лучше пишут на C или C ++?

Стоимость обслуживания кода C ++ составляет дешевле, чем C? (Я знаю, что всегда будут изменения в коде)

Опять же, все будет зависеть от ваших программистов. Вы можете написать поддерживаемый или неподдерживаемый код на любом языке.

Легко ли документировать код на C ++ против C? (Документы, описывающие как работает код)

Полностью зависит от вашей команды и инструментов, которые вы используете, но я бы сказал, что они, вероятно, будут примерно такими же.

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

9
ответ дан 8 December 2019 в 02:16
поделиться
  1. Зависит от опыта задействованной команды. С C ++ у вас есть доступ к более богатому набору библиотечных функций (но будьте осторожны с их следами при встраивании).

  2. Хорошо разработанный код C ++ будет легче поддерживать, чем код C, поскольку он допускает некоторый синтаксический сахар (конструкторы , деструкторы, RAII).

  3. Стоимость документации примерно такая же.

5
ответ дан 8 December 2019 в 02:16
поделиться

Резюме

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

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

Кривая обучения

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

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

Но как только "кривая обучения" закончится, мы сможем взглянуть на особенности языка ...

Адаптивность к языку

C довольно тупой. Либо вы используете встроенные конструкции C, и это будет легко (например, добавление двух целых чисел ...), либо вы этого не сделаете, и это будет подвержено ошибкам, а также потенциально неэффективно.

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

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

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

Компиляторы

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

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

Заключение

1 - Время разработки кода C ++ больше, чем C?

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

2 - Стоит ли поддерживать код на C ++ дешевле, чем на C? (Я знаю, что всегда будут изменения в коде)

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

3 - Легко ли документировать код на C ++ против C? (Документы, описывающие, как работает код)

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

Это зависит от того, сколько функций вы использовать. Например, использование строки C ++ вполне естественно по сравнению с эквивалентным кодом в C. На самом деле использование сложных структур в C ++ намного проще, чем в C ...

MyMatrix A, B, C ; // My Matrix is an user-defined object
// etc.
C = A * B ;        // If you believe this is anything but a
                   // multiplication of two matrices, then
                   // you need serious medical help.

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

Но тогда и C ++ может быть довольно многословным. Без foreach (например, Boost.FOREACH) написание цикла для итерации каждого элемента в контейнере STL может быть весьма впечатляющим:

for(std::map<int, std::string>::iterator it = myMap.begin(), itEnd = myMap.end() ;
    it != itEnd ;
    ++it)
{
   // Do something quite complicated...
}

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

: -)

Так что это снова зависит от знания C ++ среди ваши разработчики.

Мой личный вывод?

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

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

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

Постскриптум: используется ли C ++ в критически важных приложениях?

Очевидно, C ++ используется в F-35 («F-22 lite»). Следующий документ интересен тем, что показывает, какие функции C ++ на самом деле являются нулевыми (и, таким образом, имеют положительное влияние), и какие функции C ++ могут оказать негативное влияние на программное обеспечение:

http://www.stroustrup.com/ JSF-AV-rules.pdf

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

: -)

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

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

Post Scriptum: Используется ли C ++ в критических приложениях?

Очевидно, C ++ используется в F-35 (" F-22 lite »). Следующий документ интересен тем, что показывает, какие функции C ++ на самом деле являются нулевыми (и, таким образом, имеют положительное влияние), и какие функции C ++ могут оказать негативное влияние на программное обеспечение:

http://www.stroustrup.com/ JSF-AV-rules.pdf

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

: -)

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

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

Post Scriptum: используется ли C ++ в критических приложениях?

Очевидно, C ++ используется в F-35 (" F-22 lite »). Следующий документ интересен тем, что показывает, какие функции C ++ на самом деле являются нулевыми (и, таким образом, имеют положительное влияние), и какие функции C ++ могут оказать негативное влияние на программное обеспечение:

http://www.stroustrup.com/ JSF-AV-rules.pdf

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

: -)

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

Post Scriptum: Используется ли C ++ в важных приложениях?

Очевидно, C ++ используется в F-35 («F-22 lite»). Следующий документ интересен тем, что показывает, какие функции C ++ на самом деле являются нулевыми (и, таким образом, имеют положительное влияние), и какие функции C ++ могут оказать негативное влияние на программное обеспечение:

http://www.stroustrup.com/ JSF-AV-rules.pdf

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

: -)

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

Post Scriptum: Используется ли C ++ в важных приложениях?

Очевидно, C ++ используется в F-35 («F-22 lite»). Следующий документ интересен тем, что показывает, какие функции C ++ на самом деле являются нулевыми (и, таким образом, имеют положительное влияние), и какие функции C ++ могут оказать негативное влияние на программное обеспечение:

http://www.stroustrup.com/ JSF-AV-rules.pdf

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

: -)

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

Постскриптум: используется ли C ++ в критических приложениях?

Очевидно, C ++ используется в F-35 («F-22 lite»). Следующий документ интересен тем, что показывает, какие функции C ++ на самом деле являются нулевыми (и, таким образом, имеют положительное влияние), и какие функции C ++ могут оказать негативное влияние на программное обеспечение:

http://www.stroustrup.com/ JSF-AV-rules.pdf

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

: -)

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

Постскриптум: используется ли C ++ в критически важных приложениях?

Очевидно, C ++ используется в F-35 («F-22 lite»). Следующий документ интересен тем, что показывает, какие функции C ++ на самом деле являются нулевыми (и, таким образом, имеют положительное влияние), и какие функции C ++ могут оказать негативное влияние на программное обеспечение:

http://www.stroustrup.com/ JSF-AV-rules.pdf

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

: -)

4
ответ дан 8 December 2019 в 02:16
поделиться

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

. Однако C ++ предлагает идиомы, которые могут ухудшить производительность. Геттеры и сеттеры могут вызвать создание дополнительного кода. Для поиска Vtable потребуется несколько дополнительных инструкций по сравнению с кодом C.

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

2
ответ дан 8 December 2019 в 02:16
поделиться

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

1
ответ дан 8 December 2019 в 02:16
поделиться

Из-за более строгой типизации данных и ограничений объектов вам определенно следует использовать C ++ :)

1
ответ дан 8 December 2019 в 02:16
поделиться

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

конкретные ответы:

  1. Нет, это обычно зависит от уровень опыта разработчика с языки. Если он / она больше комфортно с C, тогда он будет писать C быстрее, чем C ++ (и наоборот).
  2. То же, что и ответ выше. Обслуживание - это не менее важно качество кода изначально письменный, а иногда и качество документация.
  3. Синтаксис документации для двух языков точно такой же.
1
ответ дан 8 December 2019 в 02:16
поделиться

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

0
ответ дан 8 December 2019 в 02:16
поделиться
  1. Время разработки кода на C ++ больше, чем на C?

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

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

Нет. Это чувствительно к приложениям.

  1. Легко ли документировать код C ++ по сравнению с C? (Документы, описывающие, как работает код)

В целом они эквивалентны.

-1
ответ дан 8 December 2019 в 02:16
поделиться

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

Выберите лучший набор инструментов
На многих микроконтроллерах технология компиляторов отстает на пять или десять лет от потребительских настольных платформ. Хороший компилятор заставит вас перестать беспокоиться о микрооптимизациях, с приличным профилировщиком (готовым и вооруженным) вы можете пропустить много догадок и пользовательских измерений.

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

  • Наличие большего количества функций также означает, что вы можете использовать больше функций неправильно. Есть соблазн использовать их, потому что они звучат круто, и что может пойти не так?
  • Еще кое-что, чтобы узнать относительную / абсолютную стоимость (например, вызовы функций-членов, виртуальные вызовы, исключения, ...)
  • A фрагмент кода может иметь несколько различных значений в зависимости от другого кода, поэтому некоторые последствия для производительности не так быстро заметны, как в C.

Все эти моменты касаются разработчиков, а не самого языка.

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

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

    3
    ответ дан 8 December 2019 в 02:16
    поделиться