Почему люди используют __ (двойное подчеркивание) так много в С++

Я просматривал какой-то код с открытым исходным кодом на С++ и замечал много двойных оценок, используемых в коде, главным образом в начале имен переменных.

return __CYGWIN__;

Просто интересно, есть ли причина для этого, или это просто некоторые стили кода для людей? Я бы подумал, что мне трудно читать.

Ответ 1

Из Программирование на С++, Правила и рекомендации:

Использование двух символов подчеркивания (`__ ') в идентификаторах зарезервировано для внутреннего использования компилятора в соответствии со стандартом ANSI-C.

Подчеркивания (`_ ') часто используются в именах библиотечных функций (таких как "_main" и "_exit" ). Чтобы избежать столкновений, не начинайте идентификатор с подчеркивания.

Ответ 2

Если они не считают, что они являются "частью реализации", то есть стандартными библиотеками, тогда они не должны.

Правила довольно специфичны и немного более детализированы, чем некоторые другие предложили.

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

Кроме того, все остальные идентификаторы, начинающиеся с подчеркивания (т.е. не сопровождаемые другим подчеркиванием или заглавной буквой), зарезервированы для реализации в глобальной области. Это означает, что вы можете использовать эти идентификаторы в своих собственных пространствах имен или в определениях классов.

Вот почему Microsoft использует имена функций с ведущим подчеркиванием и все в нижнем регистре для многих своих основных функций библиотеки времени выполнения, которые не являются частью стандарта С++. Эти имена функций гарантируют, что они не будут сталкиваться ни с стандартными функциями С++, ни с функциями пользовательского кода.

Ответ 3

В соответствии со стандартом С++ идентификаторы, начинающиеся с одного подчеркивания, зарезервированы для библиотек. Идентификаторы, начинающиеся с двух символов подчеркивания, зарезервированы для поставщиков компиляторов.

Ответ 4

Вышеупомянутые комментарии верны. __Symbol__ - это, как правило, волшебный токен, предоставляемый вашим полезным компилятором (или препроцессором). Возможно, наиболее широко используемыми из них являются __FILE__ и __LINE__, которые расширяются препроцессором C, чтобы указать текущее имя файла и номер строки. Это удобно, если вы хотите зарегистрировать какой-либо отказ в утверждении программы, включая текстовое местоположение ошибки.

Ответ 5

Это то, что вы не собираетесь делать в "нормальном" коде. Это гарантирует, что компиляторы и системные библиотеки могут определять символы, которые не будут сталкиваться с вашими.

Ответ 6

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

Как упоминалось выше, это помогает предотвратить столкновение имен и помогает разграничить библиотечные переменные и ваши собственные.