# C++ стандарт написания кода для студентов первого курса
Данный стандарт разработан для написания практических задач студентов первого курса на языке C++. И хотя данный стандарт носит рекомендательный характер, и не влияет на работу кода в целом, придерживание правил указанных здесь позволит писать поддерживаемый и оптимальный код.
:::info
:bulb: **Имейте ввиду** данный стандарт, как и другие стандарты для написания кода, составленные для определенных организаций и сообществ, основан на принципе согласия сообщества, и имеет смысл только если всё сообщество его придерживается, особенно в тех случаях, когда весь программный продукт разделен на модули, разрабатываемые разными программистами.
Но что важнее, нужно понимать, когда следует отклонится от данного стандарта, ведь в некоторых ситуациях стандарт может быть просто неприменим. Если вы сомневаетесь, руководствуйтесь своими лучшими соображениями. Посмотрите на другие примеры и решите, что выглядит лучше всего, главное в написании кода его простота восприятия. И не стесняйтесь спрашивать!
:::
Пункты будут пополнятся по мере изучения материала
## <i class="fa fa-shield"></i> ***Правила безопасности***
#### <i class="fa fa-shield"></i> **Если функция возвращает значение, оно должно быть проверено.**
## <i class="fa fa-hourglass-half" aria-hidden="true"></i> Правила лучшей практики (Best Practise Rules)
#### <i class="fa fa-hourglass-half" aria-hidden="true"></i> **Цикломатическая сложность функции не должна превышать 7.**
#### <i class="fa fa-hourglass-half" aria-hidden="true"></i> **Количество строк функции не должно превышать 50.**
#### <i class="fa fa-hourglass-half" aria-hidden="true"></i> **Длина строки не должна превышать 120 символов.**
#### <i class="fa fa-hourglass-half" aria-hidden="true"></i> **В одной программе (файле) не следует использовать более 15 переменных состояния (они же глобальные переменные).**
#### <i class="fa fa-hourglass-half" aria-hidden="true"></i> **Код не должен содержать пустых блоков кода.**
#### <i class="fa fa-hourglass-half" aria-hidden="true"></i> **Если переменная объявлена, то она должна быть использована.**
#### <i class="fa fa-hourglass-half" aria-hidden="true"></i> **Целочисленные типы переменных должны использоваться с явно указанными размерами.**
#### <i class="fa fa-hourglass-half" aria-hidden="true"></i> **Имена констант, переменных, функций, файлов и прочего должны интерпретироваться однозначно (не используйте бессмысленные имена по типу `a`, `b`, `c` и т. д.)**
#### <i class="fa fa-hourglass-half" aria-hidden="true"></i> **В программе количество числовых констант должно быть сведено к минимуму**
#### <i class="fa fa-hourglass-half" aria-hidden="true"></i> **Части программы со своей областью видимостью ( к таковым относятся отдельные функции и конструкции:`if`, `switch`, `for`, `while` и др. )должны выделяться как отдельный блок кода фигурными скобками**
#### <i class="fa fa-hourglass-half" aria-hidden="true"></i> **Не использовать функции, навязываемые компанией MicroSoft, вместо стандартных во избежании невозможности собрать программу компиляторами отличными от msvs, вместо этого прописать макрос в начале программы `#define _CRT_SECURE_NO_WARNINGS` и использовать стандартные функции**
## <i class="fa fa-text-height" aria-hidden="true"></i> Правила оформления кода (Style Guide Rules)

#### <i class="fa fa-text-height" aria-hidden="true"></i> **Имена констант должны быть оформлены в стиле SCREAMING_SNAKE_CASE.**
#### <i class="fa fa-text-height" aria-hidden="true"></i> **Наименование макросов должны быть оформлены в стиле SCREAMING_SNAKE_CASE.**
#### <i class="fa fa-text-height" aria-hidden="true"></i> **Имена файлов исполняемого кода должны быть оформлены в camelCase.**
#### <i class="fa fa-text-height" aria-hidden="true"></i> **Имена функций в camelCase.**
#### <i class="fa fa-text-height" aria-hidden="true"></i> **Аргументы функции в camelCase**
#### <i class="fa fa-text-height" aria-hidden="true"></i> **Имена переменных в camelCase.**
#### <i class="fa fa-text-height" aria-hidden="true"></i> **Наименование структур в PascalCase.**
#### <i class="fa fa-text-height" aria-hidden="true"></i> **Локальные переменные/костанты должны начинаться с нижнего подчеркивания (`_year`), соответственно глобальные без него**
#### <i class="fa fa-text-height" aria-hidden="true"></i> **Переменные состояния и глобальные константы должны быть объявлены в начале файла (сразу после подключения библиотек и указания используемых областей имен)**