В данном цикле уроков разобраны синтаксис языков C и C++, некоторые инструменты стандартной библиотеки Си, а также возможности компилятора. Уроки не охватывают всех тонкостей языков и инструментов стандартных библиотек, но дают базу для написания собственных проектов, изучения чужого кода и чтения другой литературы по теме.
Уроки ориентированы на компиляторы GCC и Clang, широко используемые в том числе при разработке под микроконтроллеры. Если какие-то моменты специфичны именно для GCC, это обычно указано в уроке
C и C++ могут показаться очень сложными языками (так-то оно и есть), но главное - понять основные принципы синтаксиса и устройства файлов проекта. Тогда многие тонкости покажутся логичными и не требующими отдельного запоминания
Уроки ориентированы преимущественно на программирование микроконтроллеров, поэтому в них могут быть опущены темы, характерные для разработки под ПК и мощные контроллеры. Например, стандартная библиотека C++ рассматривается лишь частично: на некоторых embedded-платформах доступна не вся её функциональность, а отдельные возможности могут быть слишком ресурсоёмкими. И наоборот, подробнее разобраны особенности некоторых платформ и семейств микроконтроллеров. В других разделах сайта рассмотрены конкретные платформы и работа с ними, но базой для всех них являются C и C++, поэтому данный раздел рекомендуется изучить в первую очередь.
Также в отдельный раздел "Справочник" вынесена документация по некоторым заголовочным файлам стандартной библиотеки C с описанием функций и примерами использования. В самих уроках они рассмотрены бегло, поэтому после изучения уроков обращайтесь к справочнику.
Уроки изложены последовательно почти везде, где это возможно, поэтому изучать их рекомендуется по порядку. Последующие уроки опираются на информацию и термины из предыдущих без дополнительных пояснений. Иногда встречаются понятия из следующих уроков - в таком случае можно пройти дальше, а потом вернуться для полного усвоения темы.
Уроки местами содержат большой объём дополнительной информации по теме, чтобы оставаться в рамках темы и не размазывать эту информацию по другим урокам. Если что-то кажется сложным и лишним - пропустите главу, к ней всегда можно вернуться позже.
Главы со звёздочкой * необязательны для изучения: они содержат более продвинутую информацию по теме урока
Данные уроки не являются пересказом или переводом других источников: текст написан на основе личного десятилетнего опыта программирования. Для более полного погружения можно обратиться к справочнику cppreference. Это не официальный текст стандарта, но один из наиболее полных и регулярно обновляемых справочных ресурсов по C и C++.
Запуск примеров #
Большинство примеров в тексте уроков для краткости являются фрагментами кода, а не готовыми программами. Они предназначены для объяснения материала и снабжены поясняющими комментариями. Чтобы запустить такой фрагмент, может потребоваться поместить его внутрь функции, объявить используемые переменные и функции, а также подключить необходимые заголовочные файлы.
В рамках уроков мы не будем рассматривать конкретные среды разработки, поэтому предлагаю использовать онлайн-компилятор OneCompiler. Вот базовый шаблон программы, которая выводит Hello, World! в консоль. Запуск программы - кнопка Run:
#include <iostream>
#include <stdint.h>
#define LOG(x) std::cout << (x) << std::endl
int main() {
LOG("Hello, World!");
}

Здесь LOG - макрос, который выводит в консоль значение типа, поддерживаемого оператором std::cout << (удобно для простых тестов).
Раздел "Дополнительно" #
В конце большинства уроков есть блок "Дополнительно" с тезисами, вопросами, заданиями и примерами для Arduino. Для вывода в монитор порта используется объект Serial. Примеры можно адаптировать для другого окружения, заменив ввод-вывод и платформозависимые функции.
Полезные страницы #
- Набор GyverKIT – наш большой стартовый набор Arduino, продаётся в России
- Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress
- Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту (alex@alexgyver.ru)
- Поддержать автора за работу над уроками