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

  • Amazon Web Services

    Amazon Web S

    8 NİSAN 2009
  • Arun Kumar

    Arun Kumar

    18 Mart 2010
  • TWiT Netcast Network

    TWiT Netcast

    27 EKİM 2005