GÜNCELLEME - bu cevap, bana ve başkalarına mantıklı gelse de, büyük ölçüde yanlış olduğu ortaya çıkıyor (ve niyetle ilgili olarak yeterince yanlış olduğu için yeterince yanlış). (AProgrammer tarafından bir açıklama gibi sivri dışarı) beri var değil aynı karakter temel karakter setinde normalde temsil edilebileceğini zaman dize sabitleri UCS dışında kullanmalarına izin. Yani, hayır benim örnekte olduğu gibi anahtar kelimeler kaçmak için kullanarak; ve hayır kullanarak 23skiddo
kaçmak gibi 'tanımlayıcılar' yapmak için2
. Yine de, adları harici dillerle uyumlu hale getirmek için kullanılabilir, ancak sadece, bu adlar bir harfle veya genişletilmiş bir karakterle başladığında ve yalnızca harfler, rakamlar, alt çizgi ve genişletilmiş karakterler içerdiğinde görünüyor - ki bu amacı uygun şekilde destekleyemeyecek kadar kısıtlayıcı görünüyor. Bu nedenle, ana niyetin (AProgrammer'ın cevabında olduğu gibi) tanımlayıcılarda bu ekstra karakterlere izin vermek ve bu karakterlerin grafiksel olarak görüntülendiği kaynak editörlerin grafik ASVII'de olmasına izin vermek olmalıdır.
C ++ programları diğer dillerde yazılmış işlevleri çağırabilir. Standardizasyon komitesinin C ++ 'ın, bu diller henüz mevcut olmasa bile, işlev adlarında alfasayısal olmayan veya unicode karakterlere izin verebilecek diğer dillerle birlikte çalışabilmesini sağlamak iyi bir stratejidir. Standardın, bunun bağlayıcı düzeyinde nasıl çalışacağını belirtmesi gerekmez; ancak buna izin vermek için belirlenmiş bir mekanizmaya sahip olmak iyidir.
Bunun bir kullanımını görmek için geleceğe bakmanıza gerek yok. Diyelim ki içinde eski bir C kütüphanesi var catch
(ya da korumalı ya da değişebilir) ... ve C ++ 'dan çağırmak istiyorum. Ve herhangi bir nedenle C kodunu değiştirmek istemiyorum veya istemiyorum (Bu arada, bir kereden fazla C ++ anahtar kelimesi haline gelmiş bir işlev adı kullanan eski C koduyla uğraşmak zorunda kaldım ...)
UC isimleri ile bunu bir başlığa yazabilir ve sadece 'catch_func ()' diyebilirim:
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); }
Tabii çirkin, ama başlıkta sadece bir yerde olduğu için önemli değil. Aynı yaklaşım, diğer dillerdeki işlevleri çağırmak için taslaklar yapmak için kullanılabilir ve adlar C ++ anahtar sözcükleri veya unicode olsa veya boşluklar .
veya bunlara gömülü başka noktalama işaretleri olsa bile işe yarar
Diğer çeşitli dillerde, genel paterni takip etmeyen tanımlayıcıların oluşturulmasına izin veren cihazlar vardır; Verilog, örnek olarak, \abcd
bir tanımlayıcı eşdeğerdir abcd
ancak \while
ve \23skidoo
ve \44.e2
bu şekilde görülen ters eğik önek gerek çok tanımlayıcıları vardır. Verilog'un kullanım şekli nedeniyle, dış arabirimlerle ilgili oldukları herhangi bir isme izin vermek önemlidir.