C ++ 11'de değişmeyen kurallar:
- Uygulama makroları olarak kullanılması da dahil olmak üzere her kapsamda saklıdır :
- alt çizgi ile başlayan ve hemen büyük harfle başlayan tanımlayıcılar
- bitişik alt çizgi içeren tanımlayıcılar (veya "çift alt çizgi")
- Global ad alanında saklıdır:
- alt çizgiyle başlayan tanımlayıcılar
- Ayrıca,
std
ad alanındaki her şey saklıdır. (Bununla birlikte, şablon uzmanlıkları eklemenize izin verilir.)
2003 C ++ Standardından:
17.4.3.1.2 Genel adlar [lib.global.names]
Belirli adlar ve işlev imzaları her zaman uygulamaya ayrılmıştır:
- Çift alt çizgi (
__
) içeren veya alt çizgi ve ardından büyük harf (2.11) ile başlayan her ad, herhangi bir kullanım için uygulamaya ayrılmıştır.
- Alt çizgi ile başlayan her ad, genel ad alanında ad olarak kullanılmak üzere uygulamaya ayrılmıştır. 165
165) Bu adlar ad alanında da saklıdır ::std
(17.4.3.1).
C ++, C standardına (1.1 / 2, C ++ 03) dayandığından ve C99, normatif bir referans (1.2 / 1, C ++ 03) olduğundan, bunlar 1999 C Standardından da geçerlidir:
7.1.3 Ayrılmış tanımlayıcılar
Her başlık, ilişkili alt maddesinde listelenen tüm tanımlayıcıları bildirir veya tanımlar ve isteğe bağlı olarak, gelecekteki herhangi bir kitaplık yönlendirme alt maddesinde listelenen tanımlayıcıları veya her zaman kullanım için veya dosya kapsamı tanımlayıcıları olarak kullanılmak üzere ayrılmış tanımlayıcıları bildirir veya tanımlar.
- Bir alt çizgi ve bir büyük harf veya başka bir alt çizgi ile başlayan tüm tanımlayıcılar her zaman her türlü kullanıma ayrılmıştır.
- Alt çizgiyle başlayan tüm tanımlayıcılar, hem normal hem de etiket adı alanlarında dosya kapsamına sahip tanımlayıcılar olarak kullanılmak üzere her zaman ayrılır.
- Aşağıdaki alt cümlelerin herhangi birindeki (gelecekteki kütüphane talimatları dahil) her makro adı, ilişkili üstbilgilerinden herhangi biri dahil edildiğinde belirtildiği şekilde kullanılmak üzere ayrılmıştır; aksi açıkça belirtilmedikçe (bkz. 7.1.4).
- Aşağıdaki alt bölümlerden herhangi birinde harici bağlantılı tüm tanımlayıcılar (gelecekteki kitaplık yönergeleri dahil) her zaman harici bağlantılı tanımlayıcılar olarak kullanılmak üzere ayrılmıştır. 154
- Aşağıdaki alt bölümlerden herhangi birinde listelenen dosya kapsamına sahip her tanımlayıcı (gelecekteki kitaplık yönergeleri dahil), makro adı olarak ve ilişkili üstbilgilerinden herhangi biri varsa, aynı ad alanında dosya kapsamına sahip bir tanımlayıcı olarak ayrılmıştır.
Başka tanımlayıcı ayrılmış değildir. Program, tanımlayıcıyı ayrıldığı bir bağlamda bildirir veya tanımlarsa (7.1.4'te izin verilenin dışında) veya ayrılmış bir tanımlayıcıyı makro adı olarak tanımlarsa, davranış tanımsızdır.
Program #undef
yukarıda listelenen ilk gruptaki bir tanımlayıcının herhangi bir makro tanımını kaldırırsa (ile ), davranış tanımsız olur.
154) dış bağlantı ile ayrılmış tanımlayıcıların bir listesini içerir errno
, math_errhandling
, setjmp
ve va_end
.
Başka kısıtlamalar geçerli olabilir. Örneğin, POSIX standardı normal kodda görünmesi muhtemel birçok tanımlayıcı ayırır:
E
Büyük harfle başlayan isimler rakam veya büyük harf izledi:
- ek hata kodu adları için kullanılabilir.
- Ya küçük harfle başlayan ya
is
da to
küçük harfle
başlayan isimler
- ek karakter testi ve dönüştürme işlevleri için kullanılabilir.
- İle başlayan isimler ve
LC_
ardından büyük harf
- yerel özellikleri belirten ek makrolar için kullanılabilir.
- Mevcut tüm matematik işlevlerinin adları son eklenmiş
f
veya l
ayrılmış durumda
- sırasıyla, şamandıra ve uzun ikili argümanlar üzerinde çalışan ilgili işlevler için.
- İle başlayan ve
SIG
büyük harfle başlayan isimler saklıdır
- İle başlayan ve
SIG_
büyük harfle başlayan isimler saklıdır
- ek sinyal eylemleri için.
- İle başlayan isimler
str
, mem
ya wcs
bir küçük harflerden oluşan saklıdır
- ek dize ve dizi işlevleri için.
- Herhangi bir küçük harfle başlayan
PRI
veya SCN
onu izleyen veya X
ayrılmış harfler
- ek biçim belirleyici makrolar için
- İle biten isimler
_t
saklıdır
Bu adları kendi amaçlarınız için kullanmak, bir soruna neden olmayabilirken, bu standardın gelecekteki sürümleriyle çakışma olasılığını arttırır.
Şahsen sadece alt çizgi ile tanımlayıcıları başlatmıyorum. Kuralım için yeni bir ek: Hiçbir yerde çift alt çizgi kullanmayın, nadiren alt çizgi kullandığım için kolaydır.
Bu makalede araştırma yaptıktan sonra _t
, POSIX standardına göre ayrıldığı için tanımlayıcılarımı artık bitirmiyorum.
Herhangi bir tanımlayıcı ile ilgili kural _t
beni çok şaşırttı. Bunun açıklayıcı ve resmi bölüm ve ayet arayan bir POSIX standardı (henüz emin değilim) olduğunu düşünüyorum. Bu, ayrılmış adları listeleyen GNU libtool kılavuzundan alınmıştır .
CesarB, POSIX 2004 ayrılmış sembollerine ve 'diğer birçok ayrılmış önek ve son ekin ... orada bulunabileceğine' ilişkin aşağıdaki bağlantıyı sağlamıştır .
POSIX 2008 saklıdır semboller burada tanımlanır. Kısıtlamalar, yukarıdaki kısıtlamalardan biraz daha nüanslıdır.