Основное правило:
Данный документ описывает руководства, которые новички в проекте могут не сразу заметить. Эти правила не являются универсальными (кроме первого правила), и ситуации могут требовать лучшего суждения.
Используйте конструкцию if (...) {
, while (...) {
, и switch (...) {
, а не if (...){}
, while (...){}
, и switch (...){}
. Всегда используйте фигурные скобки.
Заголовочные файлы следует включать в следующем порядке:
Ваш родительский файл .hpp
(если вы являетесь файлом .cc
),
Заголовочные файлы системного уровня C (<math.h>
, <unistd.h>
и т.д.),
Заголовочные файлы стандартной библиотеки C++ (<vector>
, <algorithm>
и т.д.),
Заголовочные файлы библиотеки Boost, с условием, что файл "errors.hpp"
включен перед ними, если такие файлы есть,
Локальные заголовочные файлы с полными путями ("rdb_protocol/protocol.hpp"
и т.д.).
Причина: всегда полезно иметь один файл
.cc
, который включает каждый файл.hpp
первым, чтобы знать, что он включает все свои зависимости. Гайдлайн Google указывает на порядок C/C++/Локальных файлов, и мы принимаем это как данность. Файл"errors.hpp"
определяетBOOST_ENABLE_ASSERT_HANDLER
, чтобы сделать ошибки проверки условий Boost совместимыми с механизмом проверки условий RethinkDB, поэтому ему требуется быть включенными до заголовочных файлов Boost.3. Избегайте использования неконстантных ссылок на значения, за исключением случаев, когда они используются в качестве значений возврата.
Причина: весь код основан на этом подходе. Сейчас, кто-то, видящий вызов
foo(bar)
, может ожидать, чтоbar
не будет модифицироваться.
Исключение: методы
std::swap
и аналогичные им методыswap
других библиотек, а также другие особые случаи.
Причина: Это делает зависимости жизненного цикла объектов более очевидными (кто-то, вызывающий
foo(bar)
, может предположить, что нет новых ограничений на жизненный циклbar
— код должен статьfoo(&bar)
, что показывает, что происходит что-то странное).
Ошибки доступа к пустому указателю легче отслеживать, чем ошибки использования после освобождения. Также, они обычно не происходят: функция, принимающая аргумент типа указатель, не подразумевает, что она принимает значение пустого указателя, и это ещё не было проблемой.
DISABLE_COPYING
, чтобы сделать его недоступным для копирования. > Или объявите его конструктор копий и оператор присваивания с = delete;
самостоятельно.6. Выполните (из директории src) команду ../scripts/check_style.sh
, чтобы проверить, не внесли ли вы определенного типа стилистических ошибок.Ошибки include-what-you-use существуют, чтобы заставить вас страдать — но осознание этого делает усилия по развязыванию зависимостей заголовочных файлов намного менее трудоёмкими.
Ложноположительные ошибки можно отключить с помощью
// NOLINT(specific/category)
.
Этот скрипт поймал несколько багов (в основном связанных с расконфликтованием вызовов функций libc, не использующих рекурсивных "_r" версий).
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )