Skip to content
Alexander edited this page Jan 28, 2014 · 1 revision

Для кода мы используем Google C++ Codestyle.

Запреты

  • Не используются исключения, потому что довольно сложно их контролировать: либо приходится расставлять везде throw(SomeException, AnotherException), что довольно сложно держать в актуальном состоянии, а неуказаные эксепшны проскочат в unexpected обработчик и будет плохо; либо не указывать спецификацию вовсе и тогда с исключениями может случиться полный космос.
  • Не используется RTTI (Run-Time Type Identification), ибо штука дорогая в плане производительности и существуют соображения, что использование RTTI — признак плохой архитектуры.

Важно

Google C++ Codestyle запрещает использование C++11, ибо штука новая и еще далеко не все компиляторы поддерживают все фичи. Мы используем C++11, потому что это удобно и потому что несколько последних версий самых универсальных компиляторов полностью или почти полностью его поддерживают.

Принципы

  • Явное лучше неявного:
    • Избегайте неявных преобразований типов. Конструкторы с одним параметром должны быть отмечены ключевым словом explicit, чтобы запретить неявное приведение.
    • Избегайте переопределения операторов в случае если их можно трактовать неоднозначно.
    • Запрещайте копирование и присваивание для объектов, которые этого не поддерживают (декларация конструктора копирования и оператора присваивания в приватной секции без определения; TODO(@alex-ac): написать макрос для этого).
  • Документирование:
    • Используйте самодокументирующиеся имена объектов;
    • Не стесняйтесь написать комментарий там, где это необходимо, и только если необходимо.

Мелочи оформления

Отступы и пробелы:

  • Во всем проекте используется два пробела в качестве отступа.
  • При переносе на другую строку используется отступ в четыре пробела или длинный, к примеру, чтобы выровнять аргументы функции в стобик;
  • Отступ между функциями — одна строка;
  • Блоки кода допускается отделять одной строкой;
  • Отступ перед/после объявления класса/нэймспэйса — одна строка.
  • Внутри нэймспэйсов и #if/#endif дополнительный горизонтальный отступ не ставится.
  • Не допускаются пробелы в конце строк.

Заголовок:

// Copyright (c) 2014 The Caroline authors. All rights reserved.
// Use of this source file is governed by a MIT license that can be found in the
// LICENSE file.
// Author: Vasya Pupkin <[email protected]>

Не забывайте писать себя в авторы файла создавая его. Если вы сделали обширные модификации в файле, созданном кем-то другим — стоит добавить строку со своим именем в заголовок.

Имена объектов:

  • Переменные именуются в underlined_style;
  • Приватные и защищенные поля класса имеют на конце подчеркивание;
  • Имена типов и функции/методы именуются в CamelCaseStyle;
  • Имена простых геттеров и сеттеров должны совпадать с именем поля без конечного подчеркивания. Для сеттеров используется префикс set_.

Общее:

Используется ограничение на длину строки в 80 символов.

Полезно.

В репозиторий подтягивается скрипт cpplint, который проверяет стиль файлов на соответствие codestyle. Стоит установить его в git hooks, чтобы проверка стиля выполнялась перед каждым коммитом.

Clone this wiki locally