Цель-C: технические причины, чтобы избежать _ в качестве имени локальной переменной?

0

Рассмотрим это в (возможно, вложенном) объеме метода (функции, блока и т.д.):

int _ = 42;

Существуют ли какие-либо технические причины, чтобы избежать локальной переменной с именем _?

Некоторые рекомендации для этого вопроса:

  • Я знаю, что _ обычно префиксы переменных экземпляра Objective-C. Оставьте это в стороне. Комментарий к другим столкновениям с конвенцией приветствуется.
  • Мне тоже нравится симпатичный код, но высказывания о вкусе или чистом мнении (например, "Это (путано, нечитаемо, неподотчетно)" здесь категорически не рекомендуется).
  • Я в первую очередь заинтересован в том, чтобы ответить на этот вопрос для Objective-C, но также приветствуются ответы, связанные с C или C++.

† Купите мне пинту, и вы можете рассказать мне все об этом. :)

  • 0
    Единственный недостаток, который я вижу, это то, что это не описательное имя переменной, ожидаемо, это действительное имя переменной C: en.wikibooks.org/wiki/C_Programming/Variables#Naming_Variables
  • 0
    На самом деле это очень хорошая практика, если вы хотите быть однострочным и запутанным кодом (оба одновременно).
Показать ещё 2 комментария
Теги:
naming-conventions

2 ответа

4
Лучший ответ

C99 §7.1.3 гласит, что все идентификаторы, начинающиеся с хотя бы одного подчеркивания, зарезервированы для использования реализацией только в качестве идентификаторов области. 1_ - это идентификатор, начинающийся как минимум с одного подчеркивания, поэтому вы не должны каким-либо образом определять его в области файлов. 2

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

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

1 Да, это означает, что очень распространенная практика запуска имен функций "только для внутреннего использования" с буквой " _ за которой следует строчная буква, является технически нарушением соответствия.

2GNU gettext - известная сторонняя библиотека, которая нарушает это правило; программисту рекомендуется #define _(x) gettext(x) как сокращенное.

  • 0
    Спасибо, это именно та информация, которую я искал. Я очень вероятно буду зеленым, проверяя вас через день или два.
0

Чтобы ответить на ваш вопрос просто - нет, нет никаких технических причин, чтобы его избежать. Однако многие другие причины.

  • 0
    Я думаю, что плохая ремонтопригодность является технической причиной.
  • 0
    @ HotLicks Я отредактировал вопрос, чтобы специально исключить ремонтопригодность из области видимости.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню