мета-данные страницы
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| cpp:styleguide_cpp [2025/03/20 10:28] – radi0dev | cpp:styleguide_cpp [2025/11/09 12:07] (текущий) – внешнее изменение A User Not Logged in | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ====== | + | ====== |
| Основано на [[https:// | Основано на [[https:// | ||
| ===== Заголовочные файлы ===== | ===== Заголовочные файлы ===== | ||
| + | |||
| + | Желательно, | ||
| + | |||
| + | ==== Независимые заголовочные файлы ==== | ||
| + | |||
| + | Заголовочные файлы должны быть самодостаточными (в плане компиляции): | ||
| + | |||
| + | Заголовочные файлы должны иметь суффикс '' | ||
| + | |||
| + | ==== Блокировка от повторного включения ==== | ||
| + | |||
| + | Все заголовочные файлы должны иметь защиту от повторного включения посредством ''# | ||
| + | |||
| + | <code cpp> | ||
| + | #ifndef FOO_BAR_BAZ_H | ||
| + | #define FOO_BAR_BAZ_H | ||
| + | ... | ||
| + | #endif // FOO_BAR_BAZ_H | ||
| + | </ | ||
| + | |||
| + | ==== Подключайте используемые заголовочные файлы ==== | ||
| + | |||
| + | Не полагайся на вложенные подключения заголовочных файлов. Это позволит удалить неиспользуемые ''# | ||
| + | |||
| + | ==== Встраиваемые функции ==== | ||
| + | |||
| + | Использование встраиваемых функций может генерировать более эффективный код, особенно когда функции маленькие. Используй эту возможность для get/set функций, | ||
| + | |||
| + | Не стоит делать функции встраиваемыми, | ||
| + | |||
| + | ==== Имена и Порядок включения ==== | ||
| + | |||
| + | Включай заголовочные файлы в следующем порядке: | ||
| + | - парный файл (например, | ||
| + | - системные файлы C, | ||
| + | - стандартная библиотека %%C++%%, | ||
| + | - другие библиотеки, | ||
| + | - файлы твоего проекта. | ||
| + | |||
| + | Отделяй каждую (непустую) группу файлов пустой строкой. | ||
| + | |||
| + | В подключении не стоит использовать UNIX псевдонимы ('' | ||
| + | |||
| + | При подключении заголовочных файлов используй угловые скобки только если это требуется библиотекой. В частности: | ||
| + | * заголовочные файлы стандартных библиотек C и %%C++%% | ||
| + | * системные заголовочные файлы POSIX, Linux и Windows | ||
| ===== Область видимости ===== | ===== Область видимости ===== | ||
| + | |||
| + | ==== Пространства имен ==== | ||
| + | |||
| + | Размещай свой код в namespace (с уникальным именем). | ||
| + | Не используй директиву '' | ||
| + | |||
| + | В конце объявления многострочного пространства имён добавляй комментарий с именем этого пространства имен. | ||
| ===== Классы ===== | ===== Классы ===== | ||
| + | |||
| + | ==== Код в конструкторе ==== | ||
| + | |||
| + | Конструктор не должен вызывать виртуальные функции: | ||
| + | - Если в конструкторе вызываются виртуальные функции, | ||
| + | - Если возникнет ошибка при инициализации, | ||
| + | - | ||
| + | |||
| + | Используйте Фибричный Метод ({{fixme}} ссылка!) или метод init() Используйте '' | ||
| + | |||
| + | ==== Неявные преобразования ==== | ||
| + | |||
| + | ++++напоминалка| | ||
| + | Неявные преобразования позволяют объект одного типа (source type) использовать там, где ожидается другой тип (destination type), например передача аргумента типа int в функцию, | ||
| + | ++++ | ||
| + | |||
| + | Не объявляй неявные преобразования. Используй ключевое слово '' | ||
| ===== Функции ===== | ===== Функции ===== | ||
| + | |||
| + | Желательно писать маленькие и сфокусированные на одной задаче функции. Если ф-я превышает 40 строк, стоит задуматься о разбитии. | ||
| + | |||
| + | ==== Перегрузка функций ==== | ||
| + | |||
| + | Перегружайте функцию, | ||
| + | |||
| + | ==== Аргументы по-умолчанию ==== | ||
| + | |||
| + | Аргументы по-умолчанию __под запретом__ для виртуальных функций (где они могут работать некорректно) и для случаев, | ||
| + | |||
| + | ==== Синтаксис указания возвращаемого типа в конце ==== | ||
| + | |||
| + | В C++ есть две формы декларации функций. В старой форме возвращаемый тип указывается перед именем функции: | ||
| + | <code cpp> | ||
| + | int foo(int x); | ||
| + | </ | ||
| + | |||
| + | Новая форма использует auto перед именем функции и завершается возвращаемым типом, указываемым после списка аргументов. Например, | ||
| + | <code cpp> | ||
| + | auto foo(int x) -> int; | ||
| + | </ | ||
| + | |||
| + | Используйте обычный (более старый) стиль декларации функции, | ||
| + | |||
| + | ===== Специфика C++ ===== | ||
| + | |||
| + | {{fixme}} | ||
| ===== Именование ===== | ===== Именование ===== | ||
| Строка 21: | Строка 119: | ||
| | camelCase | | camelCase | ||
| | ::: | методы классов | | ::: | методы классов | ||
| + | | ::: | accessor-ы, | ||
| + | | ::: | mutator-ы, set | setUserEmail | | ||
| | snake_case | переменные | | snake_case | переменные | ||
| | ::: | параметры | | ::: | параметры | ||
| | ::: | члены class (*_) | account_balance_ | | | ::: | члены class (*_) | account_balance_ | | ||
| | ::: | члены struct | | ::: | члены struct | ||
| - | | ::: | accessor-ы, | + | | ::: | namespace |
| - | | ::: | mutator-ы, set | setUserEmail | | + | |
| - | | ::: | namespace | + | |
| | UPPER_SNAKE_CASE | макросы | MAX_BUFFER_SIZE | | | UPPER_SNAKE_CASE | макросы | MAX_BUFFER_SIZE | | ||
| | ::: | const | DEFAULT_TIMEOUT | | | ::: | const | DEFAULT_TIMEOUT | | ||