Skip to content

Latest commit

 

History

History
132 lines (83 loc) · 4.83 KB

C++.ru.md

File metadata and controls

132 lines (83 loc) · 4.83 KB

Wiren Board C++ Style Guide

За основу взят яндексовский Style Guide для C++.

Разметка

Для отступов используются только пробелы. Один уровень отступа - это 4 пробела.

Знаки арифметических операций выделяются пробелами:

int sum = a + b;

Запятые выделяются пробелами с одной стороны:

int sum = GetSum(a, b);

Скобочки

В определениях функций и методов открывающая определение фигурная скобка переносится на следующую строчку.

int foo()
{
   std::cout << "foo" << std:endl;
   return 0;
}

Используется компактный стиль расстановки фигурных скобок внутри определений функций и методов.

if (foo && bar) {
   std::cout << "foobar" << std:endl;
}

В случае многострочных условий if и циклов фигурная скобка переносится на отдельную строку.

if (foo &&
    bar)
{
   std::cout << "foobar" << std:endl;
}

Блоки кода в циклах и условных выражениях, состоящие из одной строки, заключаются в фигурные скобки при переносе на другую строчку:

if (foo) return 0;
if (foo) {
    std::cout << "foo" << std:endl;
}

Пустое тело в циклах должно быть заключено в фигурные скобки

while (ReadNoise()) {}

Именование

Общее

Основным способом создания имён всего является JavaCamelCase. snake_case допускается в названиях локальных переменных, при этом они не должны использоваться в одном файле с CamelCase локальными переменными.

Функции и методы называются словосочетанием, описывающим то, что делаем функция, и начинаются с глагола: const std::string& GetMethodName().

Цель к которой нужно стремиться: по названию должно быть понятно, что делает функция, класс или что хранит в себе переменная без необходимости смотреть реализацию. Стоит избегать названий функций и методов типа DoWork(), переменных типа counter и т.д, кроме случаев, когда это не мешает пониманию.

Допускаются общепринятые короткие названия для переменных типа i,j для счётчиков в циклах.

В аббревиатурах остаётся первая заглавная буква: TMqttClient.

Классы

Классы именуются с заглавной T, например TModbusClient.

Базовые классы должны иметь название, заканчивающееся на Base: TModbusClientBase.

Названия классов-интерфейсов начинаются с I: class IException

Методы

Методы называются в CamelCase с большой буквы: GetMethodName.

Поля классов

Поля данных (переменные) классов называются с большой буквы:

class TModbusClient
{
public:

std::string GetMethodName() { return MethodName; };

private:

std::string MethodName;
}

Локальные переменные

Называются с маленькой буквы в camelCase. Допускается наименование с маленькой буквы в snake_case.

Макросы

Препроцессор C использовать не стоит. Вместо него предпочтительно использовать конструкции C++.

В очень редких случаях использование макросов действительно даёт большой выигрыш в читаемости кода. Если вы столкнулись именно с таким случаем, то пользоваться препроцессором можно. Но стоит быть готовыми отстаивать свою правоту на review.

Примеры

https://github.com/contactless/wb-homa-drivers/tree/master/wb-mqtt-serial