Подчеркивания не являются «соглашением о кодировании», а скорее здесь, чтобы избежать столкновений имен с пользовательскими макросами и т. Д.
С https://www.gnu.org/software/libc/manual/html_node/Reserved-Names.html (это на самом деле для libc, но я предполагаю, что оно выполняетсяа также для libstdc ++):
В дополнение к именам, описанным в этом руководстве, зарезервированные имена включают все внешние идентификаторы (глобальные функции и переменные), которые начинаются с подчеркивания ('_') и все идентификаторынезависимо от использования, начинающегося с двух подчеркиваний или подчеркивания, за которыми следует заглавная буква, являются зарезервированными именами.Это позволяет библиотекам и заголовочным файлам определять функции, переменные и макросы для внутренних целей без риска конфликта с именами в пользовательских программах.
Веб-сайт GNU также предоставляет дополнительную информацию о других зарезервированных именах.,Также см. Ответ на этот вопрос.Похоже, что сам стандарт C ++ диктует правила именования.
Обновление:
Информация, запрошенная OP, кажется немного разбросанной по разным страницам.Ниже я постараюсь обобщить наиболее важные моменты:
Прежде всего, информацию о таких именах, как _T
или _M_
, можно найти здесь .
Выдержка:
Для нестандартных имен, появляющихся в заголовках Standard, мы вынуждены использовать имена, начинающиеся с подчеркивания.Это называется "углификация".Соглашение: [...]
Имена типов и имена формальных аргументов шаблона: _ [AZ] [^ _]. *
Примеры: _Helper _CharT _N
Данные элементов и имена функций: _M _. *
Примеры: _M_num_elements _M_initialize ()
Статические члены-данные, константы и перечисления: _S _. *
Примеры: _S_max_elements _S_default_value
Дальнейшие исследования привели меня на страницу поддержки libstdc ++ , где написано:
Библиотека GNU C ++ является частью GCC и следует тому жемодель разработки, поэтому применяются общие правила для участия в GCC .
Перейдя по указанной выше ссылке, вы попадете на страницу, вносящую вклад в GNU GCC, где она читается (в разделе «Стандарты кодирования»)
Все материалы должны соответствовать стандартам кодирования GNU.Есть также некоторые дополнительные соглашения о кодировании для GCC;к ним относятся требования к документации и комплекту тестов, а также требования к форматированию кода.
Материалы, не соответствующие стандартам, будут возвращены с запросом для решения любых таких проблем.Чтобы помочь с подготовкой патчей, вы можете использовать скрипт contrib / check_GNU_style.sh .
Это в конечном итоге приведет к GCC Coding Conventions , котороеЭто общее руководство.
Надеюсь, это даст вам более подробную информацию.