Файлы
Файлы в С++ должны именоваться в нижнем регистре и могут содержать нижние подчеркивания (_). Это правило также распостраняется и на папки.
- Файлы исходного кода должны иметь расширение
.cc. - Публичные заголовочные файлы должны иметь расширение
.h. - Приватные заголовочные файлы могут иметь расширение
.hили.hhна ваш выбор. - Прочие файлы, предназначенные для включения, могут иметь расширение
.inc. - Файлы модулей должны иметь расширение
.cppm.
Зачастую, файл исходного кода должен иметь одинаковое имя с ассоциированным заголовочным файлом.
Пример хороших имен файлов:
very_cute_cat.h/very_cute_cat.ccutils.hh/utils.ccring_buffer.h/ring_buffer.inc
Типы
Имена типов (классов, структур, псевдонимов, перечислений) должны быть в PascalCase. Пример:
class MyClass;
struct DataHolder;
enum class BitFlags;
using Alias = MyClass;Примечание
Исключением может являться тип, который ассоциирован с
std/STL/Boostтипом. В таком случае имя типа должно быть написано в snake_case-регистре по аналогии с вышеуказанными библиотеками.
Примечание
Это же правило распостраняется на концепты из С++20.
Переменные и константы
Переменные должны быть в snake_case. Это распостраняется на:
- Локальные переменные
- Члены классов
- Аргументы функций
Поля классов и структур должны иметь префикс m_, если они являются приватными полями.
Константы должны быть названы в SCREAMING_SNAKE_CASE, то есть иметь все заглавные буквы со словами, разделенными нижними подчеркиваниями.
Пример:
auto integer_variable = 5;
auto fn(int arg1, int arg2, void* pointer_to_data) -> void;
class MyClass {
private:
int m_num1;
float m_num2;
double m_num3;
};
constexpr static auto SPEED_OF_LIGHT = 300'000'000;Функции
Функции следуют тому же правилу, что и локальные переменные - snake_case.
Примечание
Функции, предназначенные для экспорта в QML, должны соблюдать соглашение по именованию Qt - camelCase.
Пример:
class Cat {
public:
auto meow() -> void;
auto meow_loudly() -> int;
};
class CatWrapper : public QObject {
Q_OBJECT
public:
Q_INVOKABLE void meow();
Q_INVOKABLE int meowLoudly();
};Пространства имен
Пространства имен должны быть целиком в нижнем регистре и не содержать нижних подчеркиваний и прочих символов.
Публичные пространства имен должны быть короткими и простыми в написании.
Перечисления
Перечисления и их значения должны целиком следовать конвенции PascalCase. Пример:
enum class BitFlags {
FlagA = 1 << 0,
FlagB = 1 << 1,
FlagC = 1 << 2
};Макросы
Однако, если вы все же решили объявить макрос, то допускается 3 варианта именования:
- SCREAMING_SNAKE_CASE
- snake_case
- $leading_dollar_snake_case
Пример:
#define MY_VERY_COOL_MACRO(...)
#define scary_macro_that_scares(...)
#define $even_scarier_macro_that_scares_children_and_adults(...)Названия библиотек
Ваши библиотеки должны называться в соответствии со следующими правилами:
- Нижний регистр
- Могут содержать цифры
- Слова разделены символом
-
Примеры хороших названий:
cute-cat-libcatlibradar-mms-library3