最初に、すべての大文字は目障りであり、最小化する必要があることに同意しましょう。
したがって、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.
あなたは私がjestで大文字のみのキーボードに言及したと思ったかもしれません。大野。それは単に命名規則を推進した、または少なくともそれらが間違っている/正しいと思われる方法に影響を与えた、最も古く、最も古い技術の制限であるためです。次に、7ビットシリアル伝送の問題があり、使用された文字コード(ニュースピーク文字エンコード)に対応する問題が発生しました。つまり、英語のアルファベット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)を除く一般的に1文字の名前を避ける」、「lの使用を避け、1と混同しやすい」、「大文字のOを避ける、混同しやすい」などのルールを除いて、本当にそうだと思います0 "で。また、もちろん、アンダースコアで始まり、大文字が続く、2つの連続するアンダースコアを含む、またはアンダースコアで始まりグローバル名前空間にあるような予約名の使用は避けてください。
乾杯