Primero aceptemos que ALL UPPERCASE es una monstruosidad y debe minimizarse.
Por lo tanto, en C y C ++ se usa como una convención para macros, y solo para macros, porque las macros son igualmente feas, por no decir mal.
Los primeros C no tenían constante, por lo que las constantes debían expresarse como macros. Además, en aquellos primeros días, los programas eran mucho más cortos, por lo que las prácticas que hoy no son buenas podrían usarse (por ejemplo, el IIRC Brian Kernighan escribió código con muchas macros no mayúsculas). Y también, en aquellos días existían teclados que no tenían letras minúsculas; Usé uno de estos, en la computadora noruega Tandberg EC-10, alrededor de 1980 o 1979, creo que era.
Entonces, Java recogió la convención en mayúscula para constantes desde principios de C. Mientras tanto, y tal vez incluso antes de eso (no estoy seguro de la cronología aquí), C obtuvo constantes. Sin embargo, aunque, por supuesto, algunos / muchos programadores de C estaban estancados en la convención anterior por necesidad de constantes como macros en mayúsculas, los programadores de C ++ eran más sensibles.
El gran problema hoy en día es cuando a las personas primero se les enseña Java, o C (con convenciones de la edad media) primero, y luego vienen a C ++, llevándose esa convención en mayúscula.
Entonces,
int const answer = 42; // Nice, good, OK.
const int ANSWER = 0x2A; // Ouch!
#define COMPANYNAME_ANSWER 052 // Oh kill me, please.
Bueno, podrías haber pensado que mencioné los teclados solo en mayúsculas en broma. Oh no. Porque esa es simplemente la limitación de tecnología más antigua y arcaica que ha impulsado las convenciones de nomenclatura, o al menos ha afectado lo equivocado / correcto que parecían. Luego, surgió el problema de la transmisión en serie de 7 bits, que causó los problemas correspondientes con los códigos de caracteres (codificaciones de caracteres de newspeak) utilizados, lo que significaba que tenía que restringirse a las letras del alfabeto inglés, de la A a la Z.
En realidad, recomiendo seguir haciendo eso. Ahí es donde estamos! No hemos llegado más lejos.
En este momento, a partir de 2011, C ++ estándar admite nombres Unicode generales (y lo ha hecho desde 1998), mientras que las implementaciones reales de C ++ no. En particular, el compilador de g ++ tiene un carácter nacional cuestionado. Se deriva de esa limitación tecnológica de la edad oscura.
Entonces,
double blueberryJamViscosity = 0.0; // OK
double blåbærsyltetøyViskositet = 0.0; // Ouch!
Finalmente, sobre el tema de guiones bajos versus letras mayúsculas intercaladas,
- Reserve un formulario fácilmente reconocible para los nombres de tipo.
- Reserve TODAS LAS MAYÚSCULAS para macros.
- Se consistente.
Creo que es eso, en realidad, excepto por reglas como "generalmente evitar el nombre de una sola letra, excepto (loop, template param, blah blah)" y "evitar usar l, fácilmente confundido con 1" y "evitar O mayúscula, fácilmente confundido con 0 ". Además, por supuesto, evite usar nombres reservados como comenzar con un guión bajo seguido de mayúscula, que contiene dos guiones bajos sucesivos, o comenzar con un guión bajo y estar en el espacio de nombres global.
Saludos y hth