Со средней школы меня учили определять переменные следующим образом:
int _a;
или же
int __a;
это следует считать плохой практикой, потому что это в конечном итоге поставит в тупик компиляторы, которые используют переменные, начинающиеся с подчеркивания, для именования временных переменных.
Насколько я знаю, это причина, по которой некоторым людям нравится перемещать подчеркивание в конце имени, например:
int a_;
Тем не менее, я вижу много кода, который использует переменные, начинающиеся с подчеркивания. И этот код довольно хорошо работает как с Visual Studio 2010, так и с g ++ 4.x.
Итак, я задаюсь вопросом: это не проблема в наше время? Разумнее ли современные компиляторы в отношении соглашений об именах?
c++
programming-practices
naming-standards
Эмилиано
источник
источник
Ответы:
Вы, очевидно, неправильно понимаете причину подчеркивания префикса - плохая практика. Короче говоря, это потому, что стандарт C и C ++ резервирует этот префикс для деталей реализации, например, для реализации стандартной библиотеки. (обратите внимание, что _ и __ не зарезервированы для одних и тех же вещей, см. комментарии)
Даже если имена находятся в области видимости (пространство имен, класс и т. Д.), Могут существовать некоторые глобальные имена, в частности макросы, которые используют этот префикс и могут молча нарушать ваш код, если вы тоже их используете.
Так что, по большей части, в большинстве случаев безопасно использовать эти префиксы, НО, если вы их не используете, у вас есть 100% гарантия, что ваши имена никогда не будут конфликтовать с именами реализации.
Вот почему, в сомнении, не используйте этот префикс.
источник
_limit
это не ошибка, а глобальная функция. Я думаю, что лучше иметь простую политику, которая гласит: «не используйте начальные подчеркивания без исключения», чем политика, которая позволяет им в одних контекстах, а не в других. Но мы можем согласиться с этим по-разному. И чтобы было ясно, у меня нет проблем с подчеркиванием в других местах, кроме самого начала.Использование двух подчеркиваний определенно плохо - это зарезервировано для деталей реализации, специфичных для компилятора. Это не относится к использованию одного подчеркивания.
Некоторые люди ненавидят подчеркивание. Называете ли вы что-то
m_index
илиhighest_price
или_a
- они ненавидят это. 25 лет назад я работал с кем-то, кто рассказывал мне о конкретном принтере IBM (очень популярном), который умещается в большее количество строк на странице, пропуская нижний пиксель в каждой другой строке. Это было хорошо для заметок или для вывода большого количества чисел и тому подобного, но имело эффект для кода, делающего половину ваших подчеркиваний невидимыми. (Да, действительно!) Люди этого поколения обычно испытывают иррациональную ненависть к подчеркиванию, либо от взаимодействия с этим принтером, либо от работы с кем-то, кто вбивает в них то, что подчеркивание не должно использоваться.Большинство людей считают , используя смешанный случай (вариант у нас не было, скажем, Fortran) более удобочитаемый подход:
mIndex
,HighestPrice
,a
встать очень хорошо к ранее подчеркнутым примеров. Я дам вам два правила:_limit
для параметров функции,m_limit
для переменных-членов, никогда не используйте подчеркивания, регистр верблюда, пишите с заглавной буквы каждое слово, что-то венгерское ) и придерживайтесь его. Не боритесь иногда с подчеркиванием в начале, иногда в конце, иногда не используя их, и пятью различными соглашениями об использовании регистра. Быть последовательным.Рассматриваемый принтер давно отсутствует. Если вам нравится использовать одно подчеркивание за раз, не стесняйтесь. Но поймите, подчеркивающие ненавистники все еще существуют.
источник