Руководство Google по стилю в C++. Часть 11

Часть 1. Вступление

Часть 10. Форматирование
Часть 11. Исключения из правил

Изменения 2019-2024


Эта статья является переводом части руководства Google по стилю в C++ на русский язык.
Исходная статья (fork на github), обновляемый перевод.

Исключения из правил


Соглашения по кодированию, описанные выше являются обязательными. Однако, как и в любых правилах, иногда в них есть исключения, которые сейчас и обсудим.

Существующий код, не соответствующий стилю


Допустимо отклоняться от правил, если производится работа с кодом, не соответствующим этому руководству.

Если модифицируется код, написанный другим стилем, допустимо отклоняться от требований этого руководства и использовать «местный» стиль, чтобы получить согласованный код. Если сомневаетесь — спросите автора кода (или того, кто это поддерживает). Помните, что согласованность включает также и текущий стиль кода.

Программирование под Windows


Программисты под Windows могут использовать особенный набор соглашений о кодировании, основанный на стиле заголовочных файлов в Windows и другом коде от Microsoft. Так как хочется сделать, чтобы код был понятным для всех, то рекомендуется использовать единое руководство по стилю в C++, одинаковое для всех платформ.

Повторим несколько рекомендаций, которые отличают данное руководство от стиля Windows:


С другой стороны, есть правила, которые можно нарушать при программировании под Windows:



Заключение


Руководствуйтесь здравым смыслом и придерживайтесь ПОСТОЯНСТВА в стиле.

Если редактируете чужой код, то потратьте несколько минут и ознакомьтесь со стилем этого кода. Если в нём используются пробелы вокруг if — следует делать также. Если комментарий отчёркнут линией из звёздочек, то в свой комментарии также следует добавить такую линию.

Основное предназначение руководства по стилю — это единый базис, это общий словарь, позволяющий не отвлекаться на вопросы "… как это написать ..." и сосредоточиться на том, что написать. Здесь были описаны общие правила стиля, однако не стоит забывать и о текущем используемом стиле. Если в существующем коде делаются исправления, которые сильно отличаются от исходного кода, это усложняет чтение кода, сбивает с ритма. Постарайтесь этого избежать.



Примечания:
Изображение взято из открытого источника.
@Apoheliy
31.10.2021 01:47 UTC
Первоисточник

Комментарии

@Reformat
31.10.2021 04:30 UTC
+6

Не используйте #pragma once. Вместо этого используйте стандартную защиту от повторного включения, описанную в руководстве от Google. Компоненты пути в имени для макроопределения защиты должны быть относительными к корню проекта.

Какие-то вредные советы.

@NN1
31.10.2021 04:57 UTC
0

Вполне возможная причина это компиляторы, неподдерживающие эту прагму.

Гугл компания немолодая, мало ли какое старьё у них в закромах :)

31.10.2021 09:28 UTC
+2

Даже компилятор из поставки Visual C++ 6.0 поддерживает

31.10.2021 18:20 UTC
0
И, кстати, насколько позволяет вспомнить мой склероз, в исходниках, которые генерировала VC6, комбинировались оба подхода: в хедер в начале записывалась прагма, а остальная часть включалась в #ifdef-«скобки» (извините, что я использую такое просторечное выражение вместо гугловского «макроопределение защиты» 8-P).
06.11.2021 10:40 UTC
+1

Это правильный и переносимый вариант.

ifdef умеют все компиляторы, а если знакомы с pragma once, то используем.

И волки сыты и овцы целы.

@SShtole
31.10.2021 06:01 UTC
+4
Не используйте венгерскую нотацию (например, именование целочисленной переменной как iNum)

Это НЕ венгерская нотация, а то, что с ней стало, когда она попала в руки профанов. Изначально Чарльз Симоньи предлагал использовать такие префиксы, как rw для записей (rows), например, rwPosition, us (unsafe string) для строк, нуждающихся в санации (на предмет инъекций и т.п.), d (delta) для разницы зачений, например, dY. Большинство префиксов были семантические и никакой IDE никогда не смог бы верно указать эту семантику при наведении курсора. (Как любят аргументировать противники венгерки). Ну, разве что такие префиксы как pX говорят о типе, но тип указателя — сам по себе семантический.

Потом всё это дело опопсело и упростилось, и действительно стало дублировать информацию о типе, после чего венгерка разделилась на т.н. прикладную и системную. Последнюю иначе как профанацией идеи назвать трудно.

Что касается первой, она, насколько можно судить, во многих местах жива и поныне. Просто теперь префикс принято записывать целиком, не экономя ширину экрана: deltaY и т.д.

Составителям правил оформления, тем более из Гугл, знать такие тонкости, по идее, не помешало бы.