Модульное кодирование. Какие типы фрагментов кода нужно преобразовать в файлы библиотек? Обоснование и методы?
Я работаю над документацией и объединяю два фрагмента кода для тестирования частей более крупного проекта.
Я должен прокомментировать и сделать код понятным для людей, которые будут использовать его позже, и убедиться, что он модульный. Я должен создавать файлы заголовков, чтобы ссылаться на фрагменты функций в основном коде только из #include(s)
.
Я понимаю, что в C++ соглашение заключается в том, что для каждого файла заголовков (?), .h
, есть .cpp
, где . h
— это заголовочный файл, в котором объявляется все содержимое, и что .cpp
— это место, где вы определяете .h
, т.е. выполнение.
Мой руководитель сказал мне поместить больше частей кода в библиотечные файлы, потому что в будущем будут добавлены дополнительные компоненты -
но сбивает с толку, потому что вся длина исходит из использования уже существующих библиотечные файлы, просто определенный шаблон вызова предопределенных функции.
Если я помещу файлы в .h, как мне сослаться на все вызовы?
Сделать void setup () {}
?
Скомпилированный код сейчас составляет 348 строк. Все, что у него есть, это несколько #include(s)
, код для калибровки и считывания с 2 разных датчиков с использованием протоколов I2C и SPI, с 1 общим мастером Adafruit Bluefruit nRF52832 и комментариями со ссылками на таблицы данных.
Громоздкость заключается в настройках и различных способах представления данных (есть 24 строки только для распечатки данных с 1 датчика).
Должен ли весь код просто вызывать встроенные функции из библиотечного файла? Чтобы люди, читающие код, не видели деталей?
@ThermoRestart, 👍0
1 ответ
Лучший ответ:
Очень субъективно, что следует и не следует помещать в библиотеку.
Я использую простые правила:
- Если это атомарная часть кода, например драйвер оборудования, это библиотека.
- Если это что-то, что можно использовать в нескольких скетчах, это библиотека.
Возможно, такие вещи, как параметры конфигурации, можно поместить в заголовочный файл (не в библиотеку, а в заголовочный файл в папке скетча).
Возможно, вы могли бы разделить части скетча на файлы C++ или файлы INO внутри скетча (не библиотека — файлы в папке скетча, а использовать файлы INO проще, так как вам не нужны файлы заголовков, это делает IDE все для вас), чтобы сгруппировать вещи логически вместе и упростить управление (весь код ЖК-дисплея в одном файле, весь код датчика температуры в другом файле и тому подобное).
- Как объявить массив переменного размера (глобально)
- Ошибка: invalid application of 'sizeof' to incomplete type 'int []' при попытке вычислить размер массива в библиотеке
- Глобальные переменные занимают много места в динамической памяти.
- Включить Guards vs #pragma один раз
- Ошибка: "'lcd' does not name a type" при использовании библиотеки LiquidCrystal.
- Каковы традиционные способы оптимизации использования программной памяти?
- Альтернативы дисплею Nextion
- Двоичный форматировщик сообщений
Спасибо @Majenko. Буду больше изучать примеры кода и пробовать кое-что., @ThermoRestart
Когда вы говорите файл заголовка, вы имеете в виду файлы C++
.h
и.cpp
. Я должен определить некоторые функции в.h
, а затем выполнить реализацию в.cpp
, как в обычном C++. Не знаю почему, но когда я услышал заголовочный файл, мне показалось, что это всего лишь один файл. https://www.youtube.com/watch?v=2pxYEwaMtaI, @ThermoRestart.ha и .CPP не связаны парами. Вы можете иметь одно без другого. Файлы .h — это удобный способ обмена фрагментами кода между файлами .c и .CPP. Файлы .CPP компилируются., @Majenko
C++ не имеет понятия "заголовочный файл". Все это обрабатывается препроцессором C (который ошибочно называется CPP). Когда вы
#include
файл, он буквально дословно включается в этот момент. C++ не знает об этом - он видит только содержимое., @MajenkoСпасибо - Маженко. Посмотрел еще материал по предварительной обработке и https://www.tutorialspoint.com/cprogramming/c_header_files., @ThermoRestart