C ++ люди постоянно спрашивают: «Почему вы используете C, а не C ++».Я хотел бы знать, почему я должен использовать C ++, а не C.
Прежде всего, нужно понять, что оба эти языка древние , и оба они имеют ужасный синтаксис.Дебаты часто, кажется, сосредоточены вокруг «вы должны использовать C ++, потому что C ++ современен, а C стар».В действительности, дебаты о любимом аромате мяса динозавра.Вместо того, чтобы требовать современный язык, подходящий для встраиваемых систем, люди проповедуют C ++, который никогда не был чем-то иным, как странным временным гибридным языком с C-совместимостью, в ожидании изобретения более лучшего языка.
Во-вторых, существует миф о том, что C ++ является объектно-ориентированным, а C - нет.Модное словечко-объектная ориентация сводится к трем вещам:
- 1) Модульная конструкция с автономными объектами, которые тесно не связаны ни с чем другим.Это очень важный атрибут любой программы.
- 2) Частная инкапсуляция данных и сокращение объема данных.Это довольно важный атрибут любой программы.
- 3) Полиморфизм классов: классы, которые наследуют другие классы и ведут себя по-разному при наследовании.Полиморфизм весьма полезен, но гораздо меньше в небольших встроенных системах.
1) может быть полностью реализован как на C, так и на C ++, это вопрос проектирования программ, а не синтаксиса языка.И это самый важный атрибут ОО на сегодняшний день!К сожалению, ни в одном языковом стандарте нет ничего, что говорило бы о том, как разработать свою программу.В C ++ нет ничего, что автоматически привело бы к лучшему модульному дизайну, все в руках программиста.
2) может быть достигнуто как в C, так и в C ++.Оба языка сократили объем данных.В C частная инкапсуляция осуществляется через несколько ужасный синтаксис с ключевым словом static для переменных области видимости файла.В C ++ это делается более элегантно с private / protected.
3) может быть достигнуто как в C, так и в C ++.Оба языка имеют синтаксис ужасный для этого.В C вы бы возились со структурами и интерфейсами функций для достижения этой цели.В C ++ вы можете сделать это менее ужасными способами, используя наследие и делая функции «виртуальными».Однако синтаксис C ++ и необходимая реализация по-прежнему представляют собой один большой беспорядок, хотя и немного лучше, чем способ C.
Ни один из языков не даст вам вещей, связанных с ОО, красивыми и элегантными способами.То, что C ++ выигрывает от несколько менее странного синтаксиса, он теряет, когда вы начинаете переходить через неопределенное / неуказанное / определяемое реализацией поведение.
Казалось бы, весь аргумент OO не имеет большого значения, C ++ не являетсяогромное улучшение, когда дело доходит до ОО.Тогда что еще есть в C ++, что мне нужно во встроенной системе?Выделяется одна вещь: стандартизированный синтаксис встроенного ассемблера.Это, пожалуй, самое большое преимущество C ++ перед C для встраиваемых систем.
Кроме того, исключения, STL, шаблоны, RTTI, перегрузка овератора, перегрузка функций и т. Д., Все это более или менее бесполезные функции, которые можно использовать.жить без.
В конце концов, реальность приходит вам в голову: очень мало встроенных компиляторов, если таковые вообще имеются, которые смогли полностью реализовать C ++ в соответствии со стандартом.