Ну эта тема вроде не про проекты. А так я делаю, и как сделаю, обязательно поделюсь. Больше того, я надеюсь даже пользу сообществу принести=) причем, по большей части, именно тем, кто не дружит с программированием.
Чтобы не разводить холивар на тему "какой язык лучше" (касается не только Cей) следует наблюдать прикладные моменты. А, как мне кажется, Вы только начинаете осваивать МК? Несколько готовых проектов, а потом все станет на место.
МК только осваиваю, код пишу давно. Я никогда и ни с кем не буду "говорить" на тему "какой язык лучше". Я просто предложил подход к обучению программированию, который считаю разумным.
Да пробовал уже, знаю. Что это меняет? В таком случае для меня чистота заключается в не разведении зоопарка из 100500 инструментов узкой специализации и последующего создания всяких химер и гибридов, требующих десятка разных тулчейнов в одном проекте. Вот строго наоборот.
Программированию МК. Но если уровень "что вообще можно почитать", то это не важно. Вы хотите апеллировать к тому, что у меня нет опыта программирования МК?
Тема находится в ветке 'Микроконтроллеры AVR' и, так полагаю, в контексте этих микроконтроллеров и стоит рассматривать обсуждаемый вопрос. Так вот выбор языка C++ кажется странным, т.к. большинство плюшек языка останутся за бортом по причине невозможности их использования. В частности: 1. виртуальные функции -- их лучше избегать, т.к. их использование "жрёт" оперативку, которой и так капли (это касается avr-g++, за другие компиляторы не знаю); 2. rtti -- вообще нет; 3. динамическое создание и удаление объектов -- то же лучше избегать, всё из-за той же оперативки малого объёма и ущербности в реализации динамического выделения памяти. Вот и получается, что в контексте AVR остаётся только возможность написать ключевое слово 'class' и все преимущества над C на этом заканчиваются. Хотя есть ещё шаблоны... Наверно шаблоны это единственное, что можно можно принять за плюс в пользу С++ против С. И то только при создании библиотечных компонентов.
Ну, либо вы не хотите понять, что я имею ввиду, либо вы не понимаете сути вещей, которые стоят за моими словами. Так вы как раз и создаете химеру из двух принципиально разных языков. Т.е. с одной стороны, это и не плюсы вовсе, в с другой, и не компилится как Си. Я уже писал, чем это вам грозит.
Ну формально то плюшек достаточно. И, наверное, для небольших программ можно и на плюсах писать. Если не бояться оверхеда. На счет виртуальных функций, мне не хочется полностью от них отказываться. Хотя, конечно, не стоит использовать не подумав.
Кстати, что любопытно, из всех фишек плюсов шаблоны позволяют довольно элегантно строить гибкий код, пусть и без всякой динамики с полиморфизмом. Только так немногие пишут, ибо сложно и нужно понимать, что делаешь, не только и не столько в языке, сколько в архитектуре.
Просто мне этот подход видится чуждым и не стоящим усилий. Просто использую C++ в необходимой мере, не ограничиваясь подмножеством простого C, если на то есть причины. Наличие возможности у инструмента не обязывает вас ей пользоваться всегда и везде. Да и компилятор в конце концов один. Единственно проблема может возникнуть с переносом на экзотические архитектуры, для которых есть только компиляторы С, но не плюсов. Вот тогда да, это попадалово.
Не знаю, как можно продолжать беседу, после того как собеседник заявляет, что не хочет понимать что-либо, потому что это не стоит того. Никогда не понимал, как люди могут судить о вещах, которых не знают. Даже странно это видеть..
Я пытался в полутора десятков классов применить виртуальные функции. Результат 2 кило оперативы из 4-х ушло только на таблицы виртуальных функций. А только для хранения других данных нужно было около 3 кБ. В общем пришлось лепить костыль из "собственной" реализации, так сказать, виртуальных функций и таблиц с размещением их во флеш (суть в том, что с применением наследования и вирт.функций задача решалась на много проще, чем с применением процедурного подхода). Вот такие пироги...
Хм.. честно говоря, я никогда особенно не задумывался. сколько память жрут мои классы. Ну, виртуальные функции точно использовал без ограничений, на x86 то. Из вашего описания не совсем понятно, сколько всего было инстанциировано классов, а еще лушче оцените произведение количества инстансов на среднее количество виртуальных функций в классах.
C# - облегченный С++ (для таких задач и строился) - хорош для изучения и понимания идеологии ООП. С него на С++ перейдете "как по маслу".
И вот это тоже.. да, вам будет более или менее привычно. Но не более. Да и зачем программисту C# вообще переходить на плюсы?
Ответ: Этот маленький нюанс вносит сильные корректировки в обсуждаемую тему. Не стоит на меня обижаться - новички всегда начинают заявлять о себе на абстракциях. Но, поработав паяльником, понимают, что важнее С(ей) понимать назначение регистров и уметь ими пользоваться. Абстрактные темы отходят на второй план. Паяльник Unixon мне известен хорошо...
Речь-то не о x86, а о AVR и компиляторе avr-g++, который по какому-то недоразумению виртуальные таблицы копирует из флэш в оперативку при старте микроконтроллера. Хотя таблицы эти по сути не изменяемые и создаются на этапе компиляции, и ни что не мешает их держать во флэш и от туда читать при необходимости.