Резюме
Если имеются достойные разработчики и компиляторы 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 (и обычно лучше), и многое другое (помните, это личная точка зрения).
Post Scriptum: Используется ли C ++ в критически важных приложениях?
Очевидно, C ++ используется в F-35 ("F-22 lite"). Следующий документ интересен тем, что показывает, какие функции C ++ действительно имеют нулевую стоимость (и, следовательно, оказывают положительное влияние), и какие функции C ++ могут оказать негативное влияние на программное обеспечение:
http://www.stroustrup.com/JSF-AV-rules.pdf
Если C ++ достаточно хорош для этой плоскости , то, я думаю, C ++ хорош для многих менее амбициозных проектов ...
: -)