Какова история условного обозначения констант в верхнем регистре?
Моя интуиция заключается в том, что это началось с препроцессора C, где люди разработали практику именования макросов препроцессора в верхнем регистре, чтобы они эффективно жили в отдельном пространстве имен и избегали конфликтов имен. Я считаю, что эта практика была затем неправильно и извращается применить к не-препроцессора констант тоже ( enum
с, const
переменные).
Наименование макросов препроцессора в верхнем регистре кажется мне действительно полезным. Именование общих констант таким образом, не так много (и контрпродуктивно, если это создает коллизии с именами макросов).
Я с базы? Практика использования заглавных букв констант предшествовала C?
c
history
naming-standards
jamesdlin
источник
источник
const
идентификаторы в нижнем и#defines
верхнем регистре . Java, хотя и принял верхний регистр для констант и других языков, последовал, но я мог бы ошибиться. Требуются дополнительные исследования! :)Ответы:
Для C первая редакция языка программирования C (он же K & R) предполагает, что ваша интуиция о макросах препроцессора верна:
Во многих отношениях это было пережитком ассемблера, где макросы определялись в верхнем регистре вместе с метками, кодами операций, именами регистров и всем остальным. Появление сборки в стиле AT & T изменило это на некоторых платформах, но я думаю, что на него сильно повлиял тот факт, что терминалы, поддерживающие строчные буквы, стали чем-то особенным, а Unix был тем, что я бы назвал «строчной операционной системой».
По остальным двум пунктам ты бьешься .500:
Enum
К моменту публикации второго издания
enum
s были определены, они назывались константами перечисления и рассматривались в разделе о константах. Поскольку константы, определяемые выражениемenum
, представлены символами, это делает их символическими константами, которые, если вы собираетесь следовать рекомендованному соглашению, должны быть названы в верхнем регистре. (Как и макросы препроцессора, ничто не мешает вам поступить иначе.)Здесь подразумевается, что в отличие от некоторых последующих языков C не относится
enum
к первому типу класса, в котором сами типы различаются, значения перечисления специфичны для каждого типа и могут использоваться повторно в других. Вместо этого это удобный удобный способ записи#define
последовательностей целых чисел с прикрепленными идентификаторами. Это делаетнедопустимый, потому что все символы разделяют область и
BAZ
переопределяются. (Это было улучшение по сравнению с препроцессором, который в то время не предупреждал об одном#define
забивании другого.) Кроме того, C не волнует, смешиваете ли вы их, потому что все они просто целые числа, что делаетполностью допустимо даже на современном компиляторе со всеми включенными предупреждениями.
Const
NB.
const
Ключевое слово возникло в 1981 году с помощью Страуструпа C With Classes (которое превратилось в C ++) и в конечном итоге было принято C. Выбор имени неудачен, потому что он вступает в противоречие с использованием термина K & R термина « константа» для обозначения того, что мы теперь будем называть буквальный (например38
,'x'
или"squabble"
). Текст во втором издании не был переписан, чтобы отразить это.Объявленные переменные
const
- это отдельная история, потому что они все еще переменные. Они не должны изменяться, но имеет ли смысл понятие постоянной переменной больше, чем, скажем, гигантская креветка, является пищей для другого обсуждения. Как бы то ни было, C никогда не относился к этому серьезно, потому что стандарт требует, чтобы компилятор выдавал диагностику, когда вы пытаетесь ее изменить. Фактическое поведение не определено, если модификация компилируется и выполняется.Будучи переменными, имеет смысл, что все
const
будет следовать условию именования в нижнем регистре. Использование их для представления литералов имеет некоторые преимущества безопасности типов, но не способствует хорошей оптимизации, если для получения значения нужно добраться между блоками компиляции.Они не являются константами в смысле K & R, и поэтому их идентификаторы не должны быть в верхнем регистре. Некоторые люди используют их таким образом, но я рекомендую не такую практику, за исключением нескольких конкретных случаев.
источник
enum
параграфы о том, чтобы не быть первоклассными типами и о конфликтах переопределения, не кажутся актуальными. То, что в первом издании K & R описана практика «символических констант», достаточно. (Кроме того, после проверки моей копии второго издания K & R, я вижу, что в их примерах всеenum
константы имен указаны в верхнем регистре, что еще более подтверждает ваш ответ.)