Основа — Google C++ Style Guide.
Страница курса: Кодстайл в вики.
Проверяется автоматически: clang-tidy и clang-format, конфиги лежат
у преподавателя в public_tests.
Именование — дословно со страницы курса
| Что | Как | Пример |
|---|---|---|
| Классы, шаблонные параметры, псевдонимы типов | CamelCase | HashTable, ValueType |
| Функции | CamelCase | FindMax |
| Абстрактные классы | CamelCase с I в начале | IClass, IPhone |
| Глобальные константы, константы пространства имён, статические константные поля | CamelCase с k в начале | kGlobalConstant, kName |
| Переменные и поля класса | snake_case | current_pos |
| Приватные поля класса | snake_case с _ в конце | private_field_, size_ |
| Пространства имён | snake_case | my_namespace |
Форматирование
Не из страницы курса
Пункты ниже — из Google C++ Style Guide, на который курс ссылается. На самой странице курса их нет, но
clang-formatпроверяет именно их.
- Отступ — 2 пробела, табуляции не используются.
- Длина строки — не более 80 символов.
#includeгруппами, внутри группы — по алфавиту: свой заголовок, C-заголовки, C++-заголовки, чужие библиотеки, свои файлы.- Одна переменная на одну инструкцию объявления, инициализация при объявлении.
- Магические числа выносятся в именованные константы.
Где это проверяется
Задания сдаются в Яндекс.Контест, проверки живут там. Локально гонять их
необязательно, но можно — если рядом с файлом лежат конфиги .clang-format
и .clang-tidy, они подхватываются автоматически:
clang-format -i main.cpp # привести формат к кодстайлу
clang-format --dry-run -Werror main.cpp # молчит — формат в порядке
clang-tidy main.cpp -- -std=c++17 # молчит — замечаний нетЛокальные конфиги — реконструкция преподавательских, возможны расхождения. Итоговое слово всегда за проверяющей системой.
Чего делать нельзя
Отключать проверки вместо исправления кода:
/* clang-format off */ // выключает форматирование
#ifndef __clang_analyzer__ // прячет код от статического анализаТакой файл не проходит проверку, а уклоняется от неё: __clang_analyzer__
определён именно в момент анализа, поэтому анализатор видит пустой файл.
Компилятор и тесты на это никак не реагируют, а на ревью конструкция видна
в первой строке.
Углубление — L02
goto запрещён на территории курса. Вместо него — циклы, break, continue,
ранний return, флаг состояния или отдельная функция: обойтись без goto
можно в любой ситуации. Почему — в
L02 - Области видимости и циклы.