Идентификаторы с подчёркивания
От: tarkil Россия http://5209.copi.ru/
Дата: 08.04.10 07:57
Оценка:
Коллеги, а вот правило «не начинайте свои идентификаторы с подчёркивания, ибо зарезервировано под системные имена» — оно ещё актуально или ушло в область преданий старины глубокой?

А то нестатические поля классов уж очень удобно с подчёркивания начинать. Но опасаюсь.
--
wbr, Peter Taran
Re: Идентификаторы с подчёркивания
От: Кодт Россия  
Дата: 08.04.10 08:09
Оценка: 7 (2) +1
Здравствуйте, tarkil, Вы писали:

T>Коллеги, а вот правило «не начинайте свои идентификаторы с подчёркивания, ибо зарезервировано под системные имена» — оно ещё актуально или ушло в область преданий старины глубокой?


С __двух или _Капс. _одиночное подчёркивание можно.

Во всяком случае, STL для VC вовсю использует _Капс для внутренних нужд.
Если не боишься случайно пересечься с ними и в каком-нибудь экзотическом случае сломать, например, ADL — то пожалуйста.

T>А то нестатические поля классов уж очень удобно с подчёркивания начинать. Но опасаюсь.


Чем плохо m_name или name_ ?
Перекуём баги на фичи!
Re: Идентификаторы с подчёркивания
От: uzhas Ниоткуда  
Дата: 08.04.10 08:16
Оценка:
Здравствуйте, tarkil, Вы писали:

T>Коллеги, а вот правило «не начинайте свои идентификаторы с подчёркивания, ибо зарезервировано под системные имена» — оно ещё актуально или ушло в область преданий старины глубокой?


T>А то нестатические поля классов уж очень удобно с подчёркивания начинать. Но опасаюсь.


ничего не изменилось

16.8 Predefined macro names
....
3 The values of the predefined macros (except for _ _ FILE _ _ and _ _ LINE _ _) remain constant throughout
the translation unit.
4 If any of the pre-defined macro names in this subclause, or the identifier defined, is the subject of a #define
or a #undef preprocessing directive, the behavior is undefined. Any other predefined macro names shall begin
with a leading underscore followed by an uppercase letter or a second underscore.


17.6.3.3.2 Global names [global.names]
1 Certain sets of names and function signatures are always reserved to the implementation:
— Each name that contains a double underscore _ _ or begins with an underscore followed by an uppercase
letter (2.12) is reserved to the implementation for any use.
— Each name that begins with an underscore is reserved to the implementation for use as a name in the
global namespace.

Re: Идентификаторы с подчёркивания
От: Bell Россия  
Дата: 08.04.10 08:18
Оценка: 4 (1)
Здравствуйте, tarkil, Вы писали:

T>Коллеги, а вот правило «не начинайте свои идентификаторы с подчёркивания, ибо зарезервировано под системные имена» — оно ещё актуально или ушло в область преданий старины глубокой?

17.4.3.1.2
— Each name that contains a double underscore (_ _) or begins with an underscore followed by an uppercase
letter (2.11) is reserved to the implementation for any use.

— Each name that begins with an underscore is reserved to the implementation for use as a name in the
global namespace.165)

Сноска 165
Such names are also reserved in namespace ::std (17.4.3.1).



В драфте C++0x это требование по-прежнему присутствует.

T>А то нестатические поля классов уж очень удобно с подчёркивания начинать. Но опасаюсь.

Если после подчеркивания не стоит заглавная буква, то ничего страшного — такие имена запрещено использовать только в глобальном пространстве имен, и в пространстве std.

Кстати некоторые известные товарищи рекомендуют добавлять подчеркивание в конце имени члена )
Любите книгу — источник знаний (с) М.Горький
Re: Идентификаторы с подчёркивания
От: Lorenzo_LAMAS  
Дата: 08.04.10 08:18
Оценка: 1 (1)
>актуально или ушло в область преданий старины глубокой?

актуально: имена с двойным подчеркиванием и подчеркиванием в начале и следующей за ним uppercase letter — их вообще не стоит использовать. Имена, начинающиеся с подчеркивания — зарезервированы в пространстве имен стд и глобальном. В принципе, можно их использовать. Саттер что-то там такое говорил о возможности существования макросов с такими именами (мол им плевать на области видимости вообще), но это глупая мысль — тогда любое имя нельзя использовать — вдруг макрос??????
Of course, the code must be complete enough to compile and link.
Re[2]: Идентификаторы с подчёркивания
От: Lorenzo_LAMAS  
Дата: 08.04.10 08:23
Оценка:
К>экзотическом случае сломать, например, ADL — то пожалуйста.
не могу себе представить такое — есть пример?
Of course, the code must be complete enough to compile and link.
Re[2]: Идентификаторы с подчёркивания
От: tarkil Россия http://5209.copi.ru/
Дата: 08.04.10 08:40
Оценка: +1
Здравствуйте, Кодт, Вы писали:

К>С __двух или _Капс. _одиночное подчёркивание можно.


В смысле подчёркивание+большая буква низзя, а подчёркивание+маленькая можно?

_Name — бяка, _name — конфетка?

К>Чем плохо m_name


Им и пользуюсь обычно. Просто буквенный символ сжирает капельку внимания, простое подчёркивание лучше.

К>или name_ ?


Тоже использую. В конце чуть менее наглядно, imho.
--
wbr, Peter Taran
Re[2]: Идентификаторы с подчёркивания
От: tarkil Россия http://5209.copi.ru/
Дата: 08.04.10 08:43
Оценка:
Здравствуйте, Bell, Вы писали:

B>В драфте C++0x это требование по-прежнему присутствует.


Это важно: значит считают по-прежнему актуальным.

B>Если после подчеркивания не стоит заглавная буква, то ничего страшного — такие имена запрещено использовать только в глобальном пространстве имен, и в пространстве std.


Ага, спасибо.

B>Кстати некоторые известные товарищи рекомендуют добавлять подчеркивание в конце имени члена )


Да, пробовал. Не очень нравится, неряшливо.
--
wbr, Peter Taran
Re[2]: Идентификаторы с подчёркивания
От: jazzer Россия Skype: enerjazzer
Дата: 08.04.10 08:47
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

>>актуально или ушло в область преданий старины глубокой?


L_L>актуально: имена с двойным подчеркиванием и подчеркиванием в начале и следующей за ним uppercase letter — их вообще не стоит использовать. Имена, начинающиеся с подчеркивания — зарезервированы в пространстве имен стд и глобальном. В принципе, можно их использовать. Саттер что-то там такое говорил о возможности существования макросов с такими именами (мол им плевать на области видимости вообще), но это глупая мысль — тогда любое имя нельзя использовать — вдруг макрос??????

Нет, не любое, а только начинающееся с подчеркивания.
Так же, как нам не разрешается использовать имена с подчеркивания, так и им не разрешается использовать имена не с подчеркивания.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[3]: Идентификаторы с подчёркивания
От: tarkil Россия http://5209.copi.ru/
Дата: 08.04.10 08:49
Оценка:
Здравствуйте, tarkil, Вы писали:

T> Просто буквенный символ сжирает капельку внимания, простое подчёркивание лучше.


Сравни, например:

currentDoc->m_meta.m_apps[appIndex].m_uid

с

currentDoc->_meta._apps[appIndex]._uid

Сложнее же первое читается?
--
wbr, Peter Taran
Re[3]: Идентификаторы с подчёркивания
От: tarkil Россия http://5209.copi.ru/
Дата: 08.04.10 08:57
Оценка:
Здравствуйте, jazzer, Вы писали:

J>так и им (макросам — tarkil) не разрешается использовать имена не с подчеркивания.


Вот, кстати, пример правила, на которое все дружно забивают болт.
--
wbr, Peter Taran
Re: Идентификаторы с подчёркивания
От: Alexander G Украина  
Дата: 08.04.10 09:01
Оценка: 1 (1)
Здравствуйте, tarkil, Вы писали:

T>Коллеги, а вот правило «не начинайте свои идентификаторы с подчёркивания, ибо зарезервировано под системные имена» — оно ещё актуально или ушло в область преданий старины глубокой?


Пост Саттера
http://www.gotw.ca/gotw/085.htm

T>А то нестатические поля классов уж очень удобно с подчёркивания начинать. Но опасаюсь.


можно, если второй символ будет буквой в нижнем регистре.
Русский военный корабль идёт ко дну!
Re[4]: Идентификаторы с подчёркивания
От: Alxndr Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 08.04.10 09:05
Оценка: :)
Здравствуйте, tarkil, Вы писали:

T>
currentDoc->m_meta.m_apps[appIndex].m_uid

T>с

T>
currentDoc->_meta._apps[appIndex]._uid

T>Сложнее же первое читается?

Деметра рыдает

(Оффтоп, конечно )
Re[2]: Идентификаторы с подчёркивания
От: Alxndr Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 08.04.10 09:06
Оценка: +2
Здравствуйте, Кодт, Вы писали:

К>Чем плохо m_name или name_ ?


name_ хуже для тех, кто пользуется автодополнением текста.
Re[5]: Идентификаторы с подчёркивания
От: tarkil Россия http://5209.copi.ru/
Дата: 08.04.10 09:15
Оценка: +2
Здравствуйте, Alxndr, Вы писали:

A>Деметра рыдает


Ну и пусть её. Сложные структуры данных тоже имеют право на жизнь!
--
wbr, Peter Taran
Re[3]: Идентификаторы с подчёркивания
От: Lorenzo_LAMAS  
Дата: 08.04.10 09:32
Оценка:
J>Так же, как нам не разрешается использовать имена с подчеркивания, так и им не разрешается использовать имена не с подчеркивания.
не могу с ходу найти такого
Of course, the code must be complete enough to compile and link.
Re[4]: Идентификаторы с подчёркивания
От: jazzer Россия Skype: enerjazzer
Дата: 08.04.10 09:50
Оценка: 1 (1)
Здравствуйте, Lorenzo_LAMAS, Вы писали:

J>>Так же, как нам не разрешается использовать имена с подчеркивания, так и им не разрешается использовать имена не с подчеркивания.

L_L>не могу с ходу найти такого
вполне возможно, что такого формального требования и нету, если не понимать слово "зарезервированы" в этом смысле.
Но есть 2 факта:
1) имена с подчеркиванием зарезервированы для реализации (чтобы не было конфликтов и феерверков).
2) никто проблем (конфликтов и феерверков) на ровном месте создавать не будет, тем более если их легко избежать.
Имхо, этого достаточно, чтоб чувствовать себя спокойно на счет "любых имен" и использовать имена не с подчеркивания без опаски.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[5]: Идентификаторы с подчёркивания
От: Lorenzo_LAMAS  
Дата: 08.04.10 09:54
Оценка:
J>Но есть 2 факта:
J>1) имена с подчеркиванием зарезервированы для реализации (чтобы не было конфликтов и феерверков).
J>2) никто проблем (конфликтов и феерверков) на ровном месте создавать не будет, тем более если их легко избежать.
J>Имхо, этого достаточно, чтоб чувствовать себя спокойно на счет "любых имен" и использовать имена не с подчеркивания без опаски.

посмотрел кстати сейчас макросы в своей стд библиотеке — все с подчеркивания
Of course, the code must be complete enough to compile and link.
Re[2]: Осмелюсь доложить...
От: slava_phirsov Россия  
Дата: 08.04.10 11:11
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Чем плохо m_name или name_ ?


Осмелюсь доложить , в RSDN coding style:

Непубличные поля (private, protected и protected internal) именуются в стиле Кэмел и начинаются с префикса _.


Оттуда же:
// Надо так:
    int _var1;
    int _var2;
    ...


Если мне не изменяет память, некоторые товарищи стилем Кэмэл именуют идентификаторы типа CamelCase, если с ними согласиться, то этот пример тогда выглядел бы как

int _Var1;


, что нарушило бы требования стандарта.
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
Re[2]: Идентификаторы с подчёркивания
От: rusted Беларусь  
Дата: 08.04.10 14:34
Оценка:
Здравствуйте, Кодт, Вы писали:

К>С __двух или _Капс. _одиночное подчёркивание можно.


К>Во всяком случае, STL для VC вовсю использует _Капс для внутренних нужд.


Так потому и использует, чтобы исключить пересечение с пользовательскими макросами. И имеет на это право (стандартная библеотека является частью implementation).
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.