Что означает 9-я заповедь? - PullRequest
8 голосов
/ 25 марта 2009

In Десять заповедей для программистов на C , как вы интерпретируете 9-ю заповедь ?

Девятая заповедь:

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

Точно, о чем это все?

Ответы [ 7 ]

27 голосов
/ 25 марта 2009

В старых компоновщиках использовалось только ограниченное количество символов символа - мне кажется, я помню, что старые мэйнфреймы IBM, в которых я начал программировать, использовали только 8 символов. Специалисты по стандартам Си установили 6 символов как «наименьший общий знаменатель», но позволили бы компоновщику разрешать более длинные имена, если они этого хотят.

Если вы действительно нажмете один из этих наименьших общих знаменателей, внешние символы (имена функций, внешние переменные и т. Д.) ABCDEFG и ABCDEFH будут для них одинаковыми. Если вы не программируете на действительно старом оборудовании, вы можете спокойно игнорировать эту «заповедь».

Обратите внимание, что любой компоновщик, который не может обрабатывать более 6 символов, также не может использовать C ++ из-за искажения имени.

9 голосов
/ 25 марта 2009

Внешний идентификатор = то, что может быть вызвано из другой системы

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

В наши дни это кажется мне слишком консервативным, если только вы не работаете со многими устаревшими системами.

7 голосов
/ 25 марта 2009

Вот минимальное количество значащих символов во внешнем идентификаторе, которое должно поддерживаться компиляторами C / C ++ в соответствии с различными стандартами:

  • C90 - 6 символов
  • C99 - 31 символ
  • C ++ 98 - 1024 символа

Вот пример тех проблем, с которыми вы можете столкнуться, если ваш набор инструментов ограничивается этими пределами (с http://www.comeaucomputing.com/libcomo/):

Примечание для пользователей с Borland и MetroWerks CodeWarrior в качестве бэкэнда C:

=============================================== ===================

Обратите внимание, что компилятор и компоновщик Borland, а также компилятор Metrowerks, кажется, максимальная длина внешнего идентификатора 250 символов. Получается что некоторые из созданных искаженных имен шаблонов не могут вписывается в это пространство. Поэтому, когда Borland или Metrowerks используется как бэкэнд-компилятор C, мы переназначили некоторые из имен libcomo использует для сокращения имен. Так коротко, на самом деле мы не могли сойти с рук имена, начинающиеся с подчеркивания. На самом деле, необходимо было отобразить большинство до двух имен символов.

6 голосов
/ 25 марта 2009

В ответ на:

  • C ++ 98 - 1024 символа

«Начни юмор»

Приложение к 9-й заповеди:

Если твои внешние идентификаторы приближаются, чтобы быть где-нибудь почти столько же, сколько тысяча тебе должно быть двадцать четыре быстро вывели на улицу и застрелили.

'/ конец юмора'

5 голосов
/ 25 марта 2009

У многих старых компиляторов и компоновщиков были ограничения на длину идентификатора. Шесть символов было общим пределом. На самом деле они могут быть длиннее, но компилятор или компоновщик выбросит все после шестого символа.

Обычно это делается для сохранения памяти таблицы символов.

4 голосов
/ 25 марта 2009

Это означает, что вы смотрите на часть древней истории. Эти заповеди в основном верны, но этот девятый может быть фактически вырезан в каменной табличке, он так стар.

Осталось загадкой: creat. Что не так с create? Всего шесть букв!

3 голосов
/ 25 марта 2009

По данным этого сайта :

Что это значит? Ваши глобальные слова должны быть «Уникальны для первых шести букв», а не «ограничены шестью буквами». Я слышал, что это в ANSI из-за крайне болезненного «устаревания» некоторых линкеров. Надеемся, что когда-нибудь ANSI скажет: «компоновщикам придется делать более длинные имена, или они будут плакать и делать более длинные имена». (И все разумные люди просто проигнорируют эту заповедь и скажут людям обновить свой компоновщик с 2 копейками - это может не сделать вас друзьями или осчастливить предупреждения ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...