За основу взят яндексовский 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