Jaka jest historia konwencji nazywania wielkimi literami?
Moją intuicją jest to, że zaczęło się od preprocesora C, gdzie ludzie opracowali praktykę nazywania makr preprocesora wielkimi literami, aby skutecznie żyć w osobnej przestrzeni nazw i unikać kolizji nazw. Wierzę, że ta praktyka została następnie źle zrozumiana i zakazana, aby stosować ją również do stałych ( zmiennych enum
, const
zmiennych) niepreprocesorowych.
Nazywanie makr preprocesora wielkimi literami wydaje mi się naprawdę przydatne. W ten sposób nazywa się stałe stałe, nie tyle (i przynosi efekt przeciwny do zamierzonego, jeśli powoduje kolizje z nazwami makr).
Czy jestem poza bazą? Czy praktyka kapitalizacji stałych była wcześniejsza niż C?
c
history
naming-standards
jamesdlin
źródło
źródło
const
małe i#defines
duże litery . Mimo to Java przyjęła wielkie litery dla stałych i innych języków, ale ten ostatni błąd mógł być zły. Potrzebne są dalsze badania! :)Odpowiedzi:
W przypadku C pierwsze wydanie The C Programming Language (alias K&R) sugeruje, że Twoja intuicja dotycząca makr preprocesora jest poprawna:
Pod wieloma względami był to pozostałość po języku asemblera, w którym makra były definiowane wielkimi literami wraz z etykietami, kodami operacyjnymi, nazwami rejestrów i wszystkim innym. Pojawienie się montażu w stylu AT & T zmieniło to na niektórych platformach, ale myślę, że był pod dużym wpływem faktu, że terminale obsługujące małe litery stały się czymś, a Unix był tym, co nazwałbym „systemem operacyjnym małych liter”.
W pozostałych dwóch punktach mrugasz .500:
Enum
Do czasu opublikowania drugiego wydania
enum
zdefiniowano je, określano je mianem stałych wyliczeniowych i omówiono w rozdziale o stałych. Ponieważ stałe zdefiniowane przez anenum
są reprezentowane przez symbole, co czyni je stałymi symbolicznymi, które, jeśli zamierzasz stosować się do zalecanej konwencji, powinny być nazwane wielkimi literami. (Podobnie jak makra preprocesora, nic nie stoi na przeszkodzie, aby zrobić inaczej).Implikacja tutaj jest taka, że w przeciwieństwie do niektórych późniejszych języków, C nie traktuje
enum
jako typu pierwszej klasy, gdzie same typy są różne, wartości wyliczenia są specyficzne dla każdego typu i mogą być ponownie użyte w innych. Zamiast tego jest to faktycznie wygodny skrót,#define
który tworzy sekwencje liczb całkowitych z dołączonymi identyfikatorami. To sprawianiepoprawna, ponieważ wszystkie symbole mają wspólny zakres i
BAZ
zostały ponownie zdefiniowane. (To była poprawa w stosunku do preprocesora, który w tamtym czasie nie ostrzegał przed jednym#define
zatkaniem drugiego). Ponadto C nie obchodzi, czy je pomieszasz, ponieważ wszystkie są tylko liczbami całkowitymi, dzięki czemucałkowicie poprawny nawet w nowoczesnym kompilatorze z włączonymi wszystkimi ostrzeżeniami.
Const
Uwaga: Słowo
const
kluczowe powstało w 1981 r. W C z klasami Stroustrupa (które przekształciło się w C ++) i ostatecznie zostało przyjęte przez C. Wybór nazwy jest niefortunny, ponieważ koliduje z użyciem przez K&R terminu stała w celu oznaczenia tego, co nazwalibyśmy teraz dosłownym (na przykład38
,'x'
i"squabble"
). Tekst w drugim wydaniu nie został przepisany, aby to odzwierciedlić.Deklarowane zmienne
const
to inna historia, ponieważ nadal są zmiennymi. Nie należy ich modyfikować, ale czy pojęcie zmiennej stałej ma sens bardziej niż, powiedzmy, krewetki jumbo są pożywieniem do kolejnej dyskusji. Cokolwiek by to nie było, C nigdy tak naprawdę nie podchodził do tego poważnie, ponieważ standard wymaga tylko, aby kompilator emitował komunikat diagnostyczny podczas próby zmiany. Rzeczywiste zachowanie nie jest zdefiniowane, jeśli modyfikacja zostanie skompilowana i wykonana.Będąc zmiennymi, sensowne jest, że wszystko
const
będzie zgodne z konwencją bycia nazwanym małymi literami. Używanie ich do reprezentowania literałów ma pewne zalety w zakresie bezpieczeństwa, ale nie zapewnia dobrej optymalizacji, jeśli trzeba sięgać między jednostkami kompilacji, aby uzyskać wartość.To, czym nie są, to stałe w sensie K&R iz tego powodu ich identyfikatory nie powinny być pisane wielkimi literami. Niektóre osoby używają ich w ten sposób, ale nie jest to zalecana praktyka, z wyjątkiem kilku szczególnych przypadków.
źródło
enum
akapity o tym, że nie są pierwszorzędnymi typami i o konfliktach redefinicji, wydają się nie mieć znaczenia. Wystarczy, że pierwsze wydanie K&R opisuje praktykę polegającą na „stałych symbolicznych”. (Ponadto po sprawdzeniu mojej kopii drugiego wydania K&R widzę, że w ich przykładach wszystkieenum
stałe nazw są