Давайте сначала договоримся, что ВСЕ ВЕРХНЯЯ ЧАСТЬ является бельмом на глазу и должна быть сведена к минимуму.
Поэтому в C и C ++ он используется как соглашение для макросов и только макросов, потому что макросы одинаково безобразны, не говоря уже о зле.
В раннем С не было констант, поэтому константы должны были быть выражены как макросы. Кроме того, в те ранние дни программы были намного короче, так что можно было использовать методы, которые сегодня не годятся (например, IIRC Брайан Керниган написал код с большим количеством макросов, не написанных заглавными буквами). Кроме того, в те дни клавиатуры, которые не имели строчных букв, существовали; Я использовал один из них, на норвежском компьютере Tandberg EC-10, примерно в 1980 или 1979 году.
Итак, Java взяла верхний регистр для констант с раннего C. Между тем, и, возможно, даже до этого (я не уверен в хронологии здесь), C получил константы. Однако, хотя, конечно, некоторые / многие программисты на C застряли в более раннем соглашении констант по необходимости в качестве макросов в верхнем регистре, программисты на C ++ были более разумными.
В настоящее время большая проблема заключается в том, что люди сначала изучают Java или C (с соглашениями средневековья), а затем приходят на C ++, принимая с собой это грязное заглавное соглашение.
Так,
int const answer = 42; // Nice, good, OK.
const int ANSWER = 0x2A; // Ouch!
#define COMPANYNAME_ANSWER 052 // Oh kill me, please.
Ну, вы могли подумать, что я упомянул только заглавные клавиши в верхнем регистре. О нет. Потому что это просто самое старое, самое архаичное технологическое ограничение, которое обусловило соглашения об именах или, по крайней мере, повлияло на то, насколько неправильными / правильными они казались. Затем возникла проблема с 7-битной последовательной передачей, которая вызвала соответствующие проблемы с используемыми кодами символов (кодировки символов Newspeak), что означало, что вы должны были ограничить себя буквами английского алфавита, от A до Z.
На самом деле я рекомендую все еще делать это. Вот где мы находимся! У нас нет дальше.
На данный момент, начиная с 2011 года, стандарт C ++ поддерживает общий Unicode в именах (и делает это с 1998 года), в то время как в реальных реализациях C ++ нет. В частности, компилятор g ++ имеет национальный характер. Это связано с технологическими ограничениями средневековья.
Так,
double blueberryJamViscosity = 0.0; // OK
double blåbærsyltetøyViskositet = 0.0; // Ouch!
Наконец, на предмет подчеркивания и перемежающиеся заглавные буквы,
- Зарезервируйте легко узнаваемую форму для имен типов.
- Зарезервируйте ВСЕ ВЕРХНИЕ ПУНКТЫ для макросов
- Быть последовательным.
Я думаю, что это действительно так, за исключением таких правил, как «как правило, избегать однобуквенных имен, кроме (loop, template param, blah blah)» и «избегать использования l, легко путать с 1» и «избегать прописных букв O, легко путать с 0 ". Также, конечно, избегайте использования зарезервированных имен, например, начиная с нижнего подчеркивания, за которым следует верхний регистр, содержащий два последовательных подчеркивания, или начиная с подчеркивания и находясь в глобальном пространстве имен.
Ура