Стиль кодирования
Типы вершин графа. enum class VertexType { Input, ///< Вход схемы. Output, ///< Выход схемы. Constant, ///< Константа. Gate, ///< Логический элемент. SubGraph ///< Подграф. };.
В этом документе собраны расширенные правила стиля для репозиториев CircuitGen. Они соответствуют смыслу английской версии и дают дополнительные практические пояснения для русскоязычной разработки.
Базовые правила
- Используйте LF-окончания строк в исходных файлах (
.cpp,.h,.hpp, ...). - Базовый отступ — 2 пробела, TAB-символы не допускаются.
- Максимальная длина строки — 80 символов.
- Не используйте несколько пустых строк подряд.
- Применяйте
UpperCamelCaseдля имен классов, enum, структур, типов, union. - Применяйте
lowerCamelCaseдля имен функций, методов и объектов. - Для переменных используйте
prefix_lowerCamelCase:d_— поля классов;i_— параметры функций/методов.
- Открывающая скобка
{ставится в той же строке, что и оператор/сигнатура. - Публичные API и ключевые функции должны иметь комментарии в формате Doxygen.
- Порядок
#include:- заголовки проекта;
- сторонние библиотеки;
- системные заголовки.
Внутри каждой группы #include сортируйте в алфавитном порядке.
Дополнительные требования
- Все предупреждения компилятора должны быть устранены до слияния в основную ветку.
- Изменения стиля не должны менять поведение кода.
Правила документирования (Doxygen)
Расширенные правила ниже уточняют пункт 9 из базового списка.
- Основные описания и TODO размещайте в
.hpp, рядом с декларациями API. - Документация оформляется через
///. - Для функций/методов используйте
@brief. - Параметры описывайте через
@param <name> <description>. - Возвращаемое значение описывайте через
@return. - Бросаемые исключения описывайте через
@throw. - Для примеров кода используйте блок
@code ... @endcode. - Для перекрестных ссылок используйте
@see. - Для enum используйте
@briefи комментируйте значения перечисления.
Короткий пример:
double divide(double i_dividend, double i_divisor);
Подробные примеры документирования
Полное описание класса
class Graph { private: int d_verticesCount; std::vector<std::vector<int>> d_adj; public: explicit Graph(int i_verticesCount) : d_verticesCount(i_verticesCount), d_adj(i_verticesCount) { } void addEdge(int i_from, int i_to); };
Полное описание функции с
///
std::runtime_error} Если делитель равен нулю. double divide(double i_dividend, double i_divisor) { if (i_divisor == 0.0) { throw std::runtime_error("Division by zero"); } return i_dividend / i_divisor; } ### Пример enum с комментариями значений hpp /// ### Пример перекрестной ссылки hpp /// Строит топологический порядок. ///
English: CodeStyle.md