Bir kullanma ile ilgili kurallar C tanımlayıcı alt çizgi nedir? | Netgez.com
SORU
23 EKİM 2008, PERŞEMBE


Bir kullanma ile ilgili kurallar C tanımlayıcı alt çizgi nedir?

C ortak üye değişkenleri oldukları gerçeğini göstermek için yerel değişkenler veya parametreler yerine önek bir tür ile üye değişken adı. Eğer MFC kökenli geldiyseniz muhtemelen m_foo kullanacağız. Ayrıca ara sıra myFoo gördüm.

C# (ya da belki sadece .NET) tavsiye gibi görünüyor sadece bir kullanarak, _foo alt çizgi. Bu C standardı tarafından izin verilir?

CEVAP
23 EKİM 2008, PERŞEMBE


Kuralları C 11'de değişmedi ():

  • Herhangi bir kapsam içinde saklıdır, uygulama makroları kullanmak için dahil:
    • bir tanımlayıcı ile baÅŸlayan hemen büyük harf ve ardından alt çizgi
    • içeren bitiÅŸik alt çizgi (veya "") çift çizgi . tanımlayıcıları
  • Küresel ad ayrılmış:
    • tanımlayıcı bir alt çizgi ile baÅŸlayan
  • Ayrıca, std ad her ÅŸeyi ayrılmıştır. (Åžablon uzmanlık eklemek için yine de izin verilir.)

2003 C Standart:

17.4.3.2.1 Genel ad [lib.global.isimleri]

Adları ve işlev imzaları bazı ayarlar her zaman uygulanması için ayrılmıştır:

  • Bir çift içeren her isim (_ _) alt çizgi veya alt çizgi, büyük harf (2.11) ardından herhangi bir kullanım için bu uygulama için ayrılmış bir ile baÅŸlar.
  • Bir ile baÅŸlayan her adı, genel ad olarak bir ad olarak kullanmak için uygulama için ayrılmıştır altını çiziyor.165

165)Böyle isimler de ad saklıdır ::std (17.4.3.1).

Çünkü C dayanır C standart (1.1/2, C 03) ve C99 bir atıf (1.2/1, C 03) bu da geçerli, 1999 C Standart:

7.1.3 tanımlayıcıları Ayrılmış

Ya da tüm tanımlayıcılar ilişkili bendi listelenen beyan tanımlar her başlık ve isteğe bağlı olarak ya da tanımlayıcılar ilgili gelecek kitaplığı yön onun bendi listelenen ve her zaman da dosya kapsamı tanımlayıcı olarak kullanmak için herhangi bir kullanım için veya ayrılmış tanımlayıcıları ilan tanımlar.

  • Tüm bu çizgi ve büyük harf ya da baÅŸka bir ile baÅŸlayan bir tanımlayıcı alt çizgi her zaman kullanım için ayrılmıştır.
  • İle baÅŸlayan tanımlayıcı alt çizgi her zaman tanımlayıcı olarak kullanılmak üzere ayrılmıştır sıradan ve etiket adı boÅŸluk hem de dosya kapsamı ile.
  • AÅŸağıdaki fikirlere herhangi her bir makro adı (geleceÄŸin Kütüphanesi dahil yol tarifi) ayrılmış ise ilgili baÅŸlıkları herhangi bir yer varsa;olarak belirtilen kullanın tabii aksi açıkça (7.1.4) belirtti.
  • AÅŸağıdaki fikirlere herhangi bir dış baÄŸlantı ile tüm tanımlayıcılar (dahil gelecek Kütüphanesi yol tarifi) her zaman tanımlayıcı olarak kullanılmak üzere ayrılmıştır harici baÄŸlantı.154
  • Kapsam aÅŸağıdaki fikirlere herhangi listelenen dosya ile her tanımlayıcı (dahil gelecek Kütüphanesi yol tarifi) tanımlayıcı olarak bir makro adı olarak kullanmak için ayrılmış olan eÄŸer ilgili baÅŸlıklar herhangi bir yer varsa, aynı ad alanı kapsamı dosya.

Diğer tanımlayıcılar saklıdır. Eğer bir program veya bir tanımlayıcı ilan tanımlar hangi bağlam (7.1.4 izin dışında) için ayrılmış, ya da ayrılmış tanımlar makro adı olarak tanımlayıcı, davranış tanımsızdır.

Eğer programı (#undef) İlk olarak tanımlayıcı herhangi bir makro tanımını kaldırır grup, yukarıda listelenen, davranış tanımsızdır.

154)Dış bağlantı ile ayrılmış tanımlayıcıları listesierrno, math_errhandling, setjmp, ve va_end içerir.

Diğer sınırlamalar. Örneğin, POSIX standardı normal kod göstermek için muhtemel olan tanımlayıcı bir sürü yedekler:

  • Adları bir sermaye ile baÅŸlayan '' bir hane veya bir büyük harf ve ardından E
    • ek hata kod adları için kullanılabilir.
  • Ya ile baÅŸlayan isimler '' veya '' küçük harf izledi
    • ek karakter testi ve dönüştürme fonksiyonları için kullanılabilir.
  • 'LC_' büyük harf tarafından takip ile baÅŸlayan isimler
    • ek makrolar için kullanılabilir yerel öznitelikleri belirterek.
  • Mevcut tüm Matematik fonksiyonları adları '' veya 'l' ayrılmış f ile ekli
    • ilgili fonksiyonlar için yüzen ve long double argüman, sırasıyla çalışır.
  • 'SİG' büyük harf tarafından takip saklıdır ile baÅŸlayan isimler
    • ek sinyal adları için.
  • 'SİG_' büyük harf tarafından takip saklıdır ile baÅŸlayan isimler
    • ek sinyal eylemler için.
  • İsim ile baÅŸlayan '',', ya da 'tuvalet' küçük harf tarafından takip saklıdır mem 'str
    • ek bir dize ve bir dizi iÅŸlevler için.
  • İsim ile baÅŸlayan 'veya' SCN' herhangi bir küçük harf veya 'saklıdır X izledi PRİ
    • ek biçim belirtici makrolar için
  • Adları '_t' ayrılmış olan bu son
    • ek türü adları için.

Şu anda kendi amaçlarınız için bu isimleri kullanarak bir soruna neden olmasa da, bu standart gelecek sürümleri ile çakışma olasılığını yükseltmek.


Şahsen ben sadece alt çizgi ile tanımlayıcıları başlama. Benim için yeni bir ek kural: kullanılan nadiren kullandığım bir alt çizgi olarak kolay olan altını her yerde çift Yok.

Bu madde üzerinde bir araştırma yaptıktan sonra artık benim tanımlayıcıları '_t'end bu POSIX standardı tarafından ayrılmıştır.

Herhangi bir tanımlayıcı ile biten hakkında kural '_t' beni çok şaşırttı. Bu bir POSIX standardı (emin değilim) açıklama ve resmi bölüm ve ayet arıyor sanırım. Bu GNU libtool el kitabından, ayrılmış isim listesidir.

POSIX 2004 ayrılmış sembolleri ve notlar için aşağıdaki link CesarB ayrılmış önek ve sonek diğer birçok ... ... bulunabilecek''. Bu POSIX 2008 semboller burada tanımlanır saklıdır. Kısıtlamalar, yukarıda biraz daha nüanslı.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Fubar Protocol

    Fubar Protoc

    21 AÄžUSTOS 2010
  • Rozetked | Обзоры

    Rozetked | Ð

    5 AÄžUSTOS 2011
  • The Computer Chronicles

    The Computer

    7 Kasım 2012