SORU
19 AĞUSTOS 2012, Pazar


Neden bana C bir sabit, sabit bir char char atamak için izin *?!

Benim şaşkınlık için, bu derler:

const char* c_str()
{
    static const char nullchar = '\0';
    return nullchar;
}

ve benim kodunda bir hata tanıttı. Neyse ki, onu yakaladım.

Bu C , ya da derleyici bir hata kasıtlı mı? Veri türü aktif olarak göz ardı olmasının bir nedeni var mı?
Açık veri türü uyuşmazlığı verilen Visual C 2010 ve çalışması gerekir neden anlamıyorum ama GCC, işe yaradı. (static gerekli değil.)

CEVAP
19 AĞUSTOS 2012, Pazar


Tanımladığınız gibi, nullchar 0 değeri bir tamsayı sabit ifadesidir.

C 03 standart tanımlar null bir işaretçi olarak sürekli: "boş Bir işaretçi olarak değerlendirilen tamsayı türü (5.19) integral sabiti bir rvalue olduğu için sıfır." Uzun lafın kısası, nullchar sabit null işaretçi, örtülü olarak ve aslında herhangi bir işaretçi dönüştürülür atanabilir anlamına gelir.

Tüm bu unsurlar olsa işe örtülü dönüşüm için gerekli olduğunu unutmayın. Eğer '\1' yerine '\0' ya da eğer kullanmış olsaydınız örneğin, vardıdeğilnullchar const niteleyici belirtilen örtülü dönüşüm, görevin başarısız olurdu -- alamazsın.

Bu dönüşüm dahil ancak istenmeyen kasıtlı olarak biliniyor. 0 olarak boş bir işaretçi oldu devralınan C. eminim emin Bjarne ve en geri kalanının C standart Komitesi (ve çoğu C toplumda genel) pahalıya seviyorum kaldırmak bu özel örtük dönüştürme, ama bunu yaparken ki yok uyumluluk ile bir çok C kodu (muhtemelen kapatmak için hepsini).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Peyton

    Peyton

    28 Aralık 2008
  • SuperPrincessjo

    SuperPrinces

    1 EKİM 2010
  • USI Events

    USI Events

    6 AĞUSTOS 2013