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

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

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

5 ответов

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

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

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

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

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

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

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

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

У гугла есть некоторые.

Это будет отличаться в зависимости от библиотеки и организации.

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

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

Исторически сложилось так, что люди писали C++ еще до создания STL. Следовательно, когда был создан STL, его стиль кодирования был одним из многих. До сих пор не существует общепринятого соглашения об именах. Поскольку у нас нет универсальной последовательности, лучшее, к чему вы можете стремиться, — это последовательность внутри вашего проекта/компании/команды.

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

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

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

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

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