更新 -この答えは、私や他の人には理にかなっているように見えますが、大部分が間違っていることがわかります(事実上、単に意図的に間違っているように意図に関して十分に間違っています)。(AProgrammerのコメントで指摘されているように)基本文字セットで同じ文字を通常表現できる場合、文字列定数の外側でUCSを使用することは許可されていません。したがって、私の例のように、キーワードをエスケープするために使用しないでください。そして、それを使用して「識別子」を作るのではなく23skiddo
、2
。外部言語と互換性のある名前を作成するためにまだ使用できますが、それらの名前が文字または拡張文字で始まり、文字、数字、下線、および拡張文字のみが含まれている場合にのみ、その意図を適切にサポートするには制限が多すぎるようです。したがって、主な目的は、識別子にこれらの余分な文字を許可し、ソースファイルがプレーンASCIIであることを許可しながら、これらの文字がグラフィカルに表示されるソースエディタを有効にすることです(AProgrammerの答えのように)。
C ++プログラムは、他の言語で記述された関数を呼び出す場合があります。標準化委員会の側では、C ++が他の言語と相互運用可能であり、そのような言語がまだ存在していなくても、関数名に英数字やユニコード文字を使用できるようにすることをお勧めします。標準では、リンカーレベルなどでこれがどのように機能するかを指定する必要はありません。しかし、それを可能にするために特定のメカニズムを用意しておくのは良いことです。
これを使用するために将来を調べる必要はありません。関数が呼び出されたcatch
(または保護された、または可変の)古いCライブラリがあり、C ++から呼び出したいとします。そして、なんらかの理由でCコードを変更できない、または変更したくない(ところで、C ++キーワードになった関数名を使用した古いCコードを複数回処理する必要がありました...)
UC名を使用して、ヘッダーにこれを記述し、「catch_func()」を呼び出すだけです。
extern "C" {
int catc\u0068( int a, int b ); // C 'catch()' function
}
inline int catch_func( int a, int b ) { return catc\u0068(a,b); }
確かにitいですが、ヘッダーの1か所にしか存在しないので問題ではありません。同じアプローチを使用して、他の言語の関数を呼び出すスタブを作成することができます。また、名前がC ++キーワードまたはUnicodeであるか、スペース.
や他の句読点が埋め込まれている場合でも機能します。
他のさまざまな言語には、一般的なパターンに従わない識別子を作成できるデバイスがあります。たとえば、Verilogでは、\abcd
はに相当する識別子ですabcd
が\while
、\23skidoo
と\44.e2
は識別子でもあります。Verilogの使用方法により、外部インターフェイスに関連するすべての名前を許可することが重要です。