SORU
16 EYLÜL 2008, Salı


C ileri bir ilan numaralama

Aşağıdaki gibi bir şey yapmaya çalışıyorum:

enum E;

void Foo(E e);

enum E {A, B, C};

derleyici reddeder. Google'da hızlı bir göz attım ve uzlaşma gibi görünüyor "yapamazsın" neden anlayamıyorum ama. Kim açıklayabilir? Çok teşekkürler.

Açıklama 2: bunu ben yapıyorum gibi özel yöntemler bir sınıf al dedi numaralama ve istemiyorum numaralama değerleri maruz - yani, örneğin, ben istemiyorum herkes biliyor E olarak tanımlanır

enum E {
    FUNCTIONALITY_NORMAL, FUNCTIONALITY_RESTRICTED, FUNCTIONALITY_FOR_PROJECT_X
}

proje X kullanıcılar hakkında bilmek istediğim bir şey değil gibi.

Yani, başlık dosyasında özel teknikler, numaralama içten cpp içinde bildirmek ve yerleşik kitaplık dosyası başlığı ve insanlara dağıtmak böylece ileri numaralama beyan etmek istedim.

Derleyici - GCC.

CEVAP
16 EYLÜL 2008, Salı


Numaralama ileriye ilan edilemez nedeni değerleri bilmeden, derleyici depolama numaralandırma değişkeni için gerekli olduğunu. C Derleyici gerçek depolama alanını belirlemek için tüm değerleri belirtilen içeren boyutu gerekli dayanarak verdi. Eğer görünen tüm ileri Bildirgesi, çeviri birimi depolama boyutu seçilmiştir yapacak bir şey yok - bir char veya int ya da başka bir şey olabilir.


ISO Bölüm 7.2.5 C Standart:

alttaki yazınbir numaralandırma tüm numaralandırma değerleri numaralandırma tanımlanan temsil eden bir tamsayı türü. Bu uygulama tanımlı olan bir tamsayı türü olarak kullanılır temel türü için bir numaralandırma dışında temel türü olamaz daha büyük int sürece değer bir kaptan olamaz uygun bir int unsigned int. Eğernumaralandırıcısı listesiboş, alttaki yazarsanız numaralandırma değeri 0 ile tek bir sayacı vardı sanki. sizeof() bir numaralandırma türü için uygulanan numaralandırma türü, ya da bir kaptan bir nesne, değeri sizeof() değeri temel türü için uygulanır.

Yanaarayanişlev parametreleri boyutları doğru çağrı yığını Kur bilmek gerekir, bir numaralandırma listesinde Listeleme sayısını işlevi prototip önce bilinmesi gerekir.

Güncelleme: M C 0 x bir sözdizimi numaralama türleri bildirmek için önerilmiş ve kabul edilmiştir. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf teklifi görebilirsiniz

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BlackBoxTV

    BlackBoxTV

    7 Mayıs 2007
  • Chuck Testa

    Chuck Testa

    14 AĞUSTOS 2011
  • FUzzyBUnnyBOoties

    FUzzyBUnnyBO

    3 EKİM 2007