Каковы предпочтительные соглашения об именах для C++?

Я очень сбит с толку, глядя на библиотеку boost и stl, а затем на примеры людей. Кажется, что имена типов с заглавной буквы чередуются со всеми строчными буквами, разделенными подчеркиванием.

Что именно нужно делать в наши дни? Я знаю, что мир .NET имеет свой собственный набор соглашений, но, похоже, он полностью отличается от сферы C++.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
1 576
4

Ответы 4

Какую банку с червями вы открыли.

Стандартная библиотека C++ использует underscore_notation для всего, потому что это то, что использует стандартная библиотека C.

Поэтому, если вы хотите, чтобы ваш код выглядел единообразно по всем направлениям (и на самом деле не использовал внешние библиотеки), это единственный выход.

Вы увидите, что boost использует ту же нотацию, потому что часто их библиотеки рассматриваются для будущих стандартов.

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

Также есть Венгерская нотация, который дополнительно различает определенные типы переменных, хотя простое упоминание этой фразы может вызвать враждебность со стороны некоторых кодеров.

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

Я рекомендую прочитать о венгерской нотации. +1 к венгерской нотации приложений, -1 к системе венгерской нотации (посмотрим, смогу ли я убедить людей прочитать эту статью)

David Rodríguez - dribeas 12.12.2008 02:03

@dribeas: Недавно я наткнулся на эту статью и согласен с вами. Мне пришлось отказаться от своей рефлекторной ненависти к любой венгерской нотации, основанной на разновидности систем.

Harper Shelby 12.12.2008 02:13

@Harper: верно, но может быть полезна венгерская нотация настоящий: [[double mLengthOfFootballField = 109.7, umHumanHairGrowthPerDay = 400; ]] Вы можете обнаружить плохие выражения, смешивая префиксы: [[mpsDecentRate = ftAltitudeDelta / sTimeDelta; // <- плохо! ]]

Aaron 12.12.2008 02:24

Нет хорошего ответа. Если вы интегрируетесь с существующей кодовой базой, имеет смысл соответствовать их стилю. Если вы создаете новую кодовую базу, вы можете установить простые рекомендации.

У Google есть.

Все будет по-разному в зависимости от библиотеки и организации.

Например, для создаваемой мной служебной библиотеки разработчика я включаю удобные модули-оболочки для различных соглашений в стиле соглашения. Так, например, модуль оболочки MFC использует нотацию m_typeMemberVariable для членов, тогда как модуль оболочки STL использует member_variable. Я пытаюсь построить его так, чтобы любой используемый интерфейс имел стиль, типичный для этого типа интерфейса.

Проблема с универсальным стилем состоит в том, что все должны согласиться, и (например) для каждого человека, который ненавидит венгерскую нотацию, найдется кто-то, кто считает, что отказ от венгерской нотации умаляет основную ценность понятности кода. Поэтому маловероятно, что в ближайшее время появится универсальный стандарт для C++.

особенно после 20 с лишним лет "хотеть одного" :)

baash05 12.12.2008 02:39

Найдите то, что вам удобно, и придерживайтесь этого. Некоторая форма стиля лучше, чем отсутствие стиля вообще, и не зацикливайтесь на том, как это делают другие библиотеки.

FWIW Я использую руководство по стилю Google C++ (с некоторыми настройками).

http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml

Мне не нравится руководство по стилю Google C++ - оно рекомендует избегать таких функций, как исключения, что является просто ужасной практикой кодирования (конечно, это может быть одна из ваших модификаций, я не знаю)

coppro 12.12.2008 19:45

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

Steve Jessop 12.12.2008 22:42

Тем не менее, IMO можно постепенно преобразовать код, использующий исключения, в небезопасную кодовую базу, при условии, чтобы вы были дисциплинированы в отношении того, какие API-интерфейсы могут генерировать исключения, и вы предоставляете API-интерфейсы адаптера для исключения исключений, где это необходимо. Но я понимаю, почему ни одной компании может не понадобиться эта боль.

Steve Jessop 12.12.2008 22:45

Другие вопросы по теме