Соглашения об именах стандартной библиотеки GNU - PullRequest
0 голосов
/ 30 мая 2018

Когда я смотрю на реализацию библиотек GNU (ну, в основном libstdc ++), я вижу, что в именовании есть повторяющиеся шаблоны.Типы шаблонов называются _Tp, члены имеют предваряющий _M_, некоторые токены имеют двойные подчеркивания и т. Д. Я пытался найти документацию по соглашениям об именах, но безрезультатно.GNU имеет руководство по стилю, которое также приведено в коде, но больше похоже на подмножество этого соглашения об именах.

Знаете ли вы какую-либо документацию по специфике стилей реализации библиотек GNU gcc?

Заранее спасибо.

1 Ответ

0 голосов
/ 30 мая 2018

Подчеркивания не являются «соглашением о кодировании», а скорее здесь, чтобы избежать столкновений имен с пользовательскими макросами и т. Д.

С 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 , котороеЭто общее руководство.

Надеюсь, это даст вам более подробную информацию.

...