# 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) ![](https://hackmd.io/_uploads/SyBeSe8y6.jpg) #### <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> **Переменные состояния и глобальные константы должны быть объявлены в начале файла (сразу после подключения библиотек и указания используемых областей имен)**