SORU
23 EYLÜL 2009, ÇARŞAMBA


size_t vs intptr_t

C standardı size_t herhangi bir dizi dizini tutan bir tip olduğunu garanti eder. Bu, mantıksal olarak, size_t herhangi bir işaretçi türü tutabileceği anlamına gelir. Bu yasal ve/olduğunu Googles buldum ya hep çalışması gerektiğini bazı sitelerde okudum:

void *v = malloc(10);
size_t s = (size_t) v;

O zaman C99, standart imzalanan intptr_t uintptr_t türleri tanıtıldı ve işaretsiz türleri işaretçiler tutmak mümkün olmasını garanti

uintptr_t p = (size_t) v;

size_t uintptr_t kullanma arasındaki fark nedir? Hem imzasız hem işlevsel olarak aynı gözüküyorlar bu yüzden herhangi bir işaretçi türü basılı tutun gerekir. Netlik daha ** 12, bir başka yerine uintptr_t (ya da daha iyisi, void *) kullanmak için herhangi bir gerçek zorlayıcı bir neden var mı? Bu alan, dahili fonksiyonları tek tarafından ele alınacaktır nerede opak bir yapı içinde, bunu yapmak için bir neden var mı?

Aynı token, ptrdiff_t imzalı bir tür işaretçi farklılıklar, ve en herhangi bir işaretçi tutan bu nedenle yetenekli tutma kapasitesine sahip olması, nasıl intptr_t farklı?

Bu tür temelde basit hizmet hepsi aynı işlevi farklı versiyonları değil mi? Değil, neden? Ben başka bir işe yaramıyorum. bu da onlardan bir tanesi ile ne yapabilir? Eğer öyleyse, neden C99 dil aslında gereksiz iki tür Ekle?

Ben seve seve göz ardı işlev işaretçileri gibi değiller uygulamak için geçerli bir sorun, ama buyur söz onlara, ben bir sinsi şüphe olacak Merkez için "doğru" cevap.

CEVAP
23 EYLÜL 2009, ÇARŞAMBA


size_t herhangi bir dizi dizini tutan bir tip. Bu şu anlama geliyor, mantıksal olarak, size_t gerekir herhangi bir işaretçi türü tutun

İlle! Hark geri gün parçalı 16-bit mimarileri için örnek: bir dizi olabilir sınırlı tek bir parçası (yani, 16-bit size_t yapardı) AMA keşke birden çok kesimi (32-bit intptr_t tip olurdu gerekli almak için segment olarak uzaklık içinde). Bunlar garip ses düzgün adresli unsegmented mimarileri bu günlerde biliyorum ama standart daha geniş bir yelpazede hitap GEREKİR 2009 yılında normal"", biliyorsun!-)

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Arun Kumar

    Arun Kumar

    18 Mart 2010
  • Damien Hayes

    Damien Hayes

    11 Mart 2008
  • RiceBunny

    RiceBunny

    16 ŞUBAT 2006

İLGİLİ SORU / CEVAPLAR