Почему люди используют __ (двойное подчеркивание) так много в С++
Я просматривал какой-то код с открытым исходным кодом на С++ и замечал много двойных оценок, используемых в коде, главным образом в начале имен переменных.
return __CYGWIN__;
Просто интересно, есть ли причина для этого, или это просто некоторые стили кода для людей? Я бы подумал, что мне трудно читать.
Ответы
Ответ 1
Из Программирование на С++, Правила и рекомендации:
Использование двух символов подчеркивания (`__ ') в идентификаторах зарезервировано для внутреннего использования компилятора в соответствии со стандартом ANSI-C.
Подчеркивания (`_ ') часто используются в именах библиотечных функций (таких как "_main" и "_exit" ). Чтобы избежать столкновений, не начинайте идентификатор с подчеркивания.
Ответ 2
Если они не считают, что они являются "частью реализации", то есть стандартными библиотеками, тогда они не должны.
Правила довольно специфичны и немного более детализированы, чем некоторые другие предложили.
Все идентификаторы, содержащие двойное подчеркивание или начинающиеся с символа подчеркивания, за которым следует буква верхнего регистра, зарезервированы для использования реализации во всех областях, т.е. могут использоваться для макросов.
Кроме того, все остальные идентификаторы, начинающиеся с подчеркивания (т.е. не сопровождаемые другим подчеркиванием или заглавной буквой), зарезервированы для реализации в глобальной области. Это означает, что вы можете использовать эти идентификаторы в своих собственных пространствах имен или в определениях классов.
Вот почему Microsoft использует имена функций с ведущим подчеркиванием и все в нижнем регистре для многих своих основных функций библиотеки времени выполнения, которые не являются частью стандарта С++. Эти имена функций гарантируют, что они не будут сталкиваться ни с стандартными функциями С++, ни с функциями пользовательского кода.
Ответ 3
В соответствии со стандартом С++ идентификаторы, начинающиеся с одного подчеркивания, зарезервированы для библиотек. Идентификаторы, начинающиеся с двух символов подчеркивания, зарезервированы для поставщиков компиляторов.
Ответ 4
Вышеупомянутые комментарии верны. __Symbol__
- это, как правило, волшебный токен, предоставляемый вашим полезным компилятором (или препроцессором). Возможно, наиболее широко используемыми из них являются __FILE__
и __LINE__
, которые расширяются препроцессором C, чтобы указать текущее имя файла и номер строки. Это удобно, если вы хотите зарегистрировать какой-либо отказ в утверждении программы, включая текстовое местоположение ошибки.
Ответ 5
Это то, что вы не собираетесь делать в "нормальном" коде. Это гарантирует, что компиляторы и системные библиотеки могут определять символы, которые не будут сталкиваться с вашими.
Ответ 6
В дополнение к библиотекам, о которых многие другие люди ответили, некоторые люди также называют макросы или #define значения для использования с препроцессором. Это упростит работу и, возможно, позволит обрабатывать ошибки в старых компиляторах.
Как упоминалось выше, это помогает предотвратить столкновение имен и помогает разграничить библиотечные переменные и ваши собственные.