首先让我们同意,ALL UPPERCASE是一件令人讨厌的事,应将其最小化。
因此,在C和C ++中,它被用作宏的约定,并且仅用作宏的约定,因为宏同样难看,更不用说邪恶了。
早期的C没有const,因此常量必须表示为宏。另外,在早期,程序要短得多,因此可以使用今天不理想的做法(例如IIRC Brian Kernighan用很多非大写的宏编写了代码)。而且,在那个年代,确实存在没有小写字母的键盘。我在挪威的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!
最后,关于下划线与穿插的大写字母,
- 为类型名称保留易于识别的形式。
- 保留所有大写的宏。
- 始终如一。
我认为实际上就是这样,除了“通常避免使用单字母名称((循环,模板参数,等等)之外”)和“避免使用l,容易与1混淆”和“避免大写O,容易混淆”之类的规则与0“。另外,当然,请避免使用保留名称,例如以下划线开头,后跟大写字母,包含两个连续的下划线或以下划线开头并位于全局名称空间中。
干杯和健康