Основа — Google C++ Style Guide. Страница курса: Кодстайл в вики. Проверяется автоматически: clang-tidy и clang-format, конфиги лежат у преподавателя в public_tests.

Именование — дословно со страницы курса

ЧтоКакПример
Классы, шаблонные параметры, псевдонимы типовCamelCaseHashTable, ValueType
ФункцииCamelCaseFindMax
Абстрактные классыCamelCase с I в началеIClass, IPhone
Глобальные константы, константы пространства имён, статические константные поляCamelCase с k в началеkGlobalConstant, kName
Переменные и поля классаsnake_casecurrent_pos
Приватные поля классаsnake_case с _ в концеprivate_field_, size_
Пространства имёнsnake_casemy_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 - Области видимости и циклы.