Sıralı olarak bir numaralandırma üzerinde yineleme nasıl yapılır? - sayfa 6

 
pavlick_ :

Programcılara not:


Şimdi numaralandırmayı düzenlememiz gerekiyorsa, bir kez ve tek bir yerde düzenleme yapıyoruz. Yeni bir eleman eklememiz gerekiyor, örneğin element_new = 56, ekle

Ve get_enumqq_array() işlevini düzenleme konusunda endişelenmeyin. Tekniğin adı X Macro https://en.wikipedia.org/wiki/X_Macro. Geliştiricilerin isteği üzerine standart numaralandırmaları benzer şekilde bitirmek kolaydır.

Belki hemen belli değil, numaralandırma şöyle çıktı:

Harika! X Macro'yu bilmiyordum, teşekkürler! ENUM_QQ_HELPER tanımının sonunda virgül nedeniyle neden hata olmadığını koddan anlamıyorum. Bir numaralandırma veya dizi belirtirken son öğeden sonra virgül olmamalıdır. Ancak derleyici nedense buna yemin etmez.

Sınanmış

 int a[] = { 1 , 2 ,};

azarlamaz. Ve olması gerektiği gibi dizinin (enum) boyutu . Güzel! Bir hata gibi görünüyor, ancak böyle bir hata özelliğinin daha iyi olmasına izin verin. Doğrusu o rahat.

 
neden virgül hatası yok

Görünüşe göre bu, özellikle her türlü "hile" için yasal bir ihlal. Endişelenme, C/C++'da da bir hata değil.

Not: başlatma konusundaki C ++ standardında:

braced-init-list:

   {initializer-list , opt }

   { }

Onlar. ayraçlı başlangıç listesinin sonundaki virgül en üst düzeyde yasaldır.

 
pavlick_ :

Onlar. ayraçlı başlangıç listesinin sonundaki virgül en üst düzeyde yasaldır.

Teşekkürler, bilip kullanacağım.
 
pavlick_ :

Programcılara not:

Peki ya yorumlardaki normal isimler?

 
Комбинатор :

Peki ya yorumlardaki normal isimler?

Hakkında bir konuşma olan bir enum örneği mümkün mü?
 
Комбинатор :

Peki ya yorumlardaki normal isimler?

Evet, yorum ekleyemiyorum. Numaralandırmaları yorumlamak için hatalı sözdizimi.

Hakkında bir konuşma olan bir enum örneği mümkün mü?

 enum E
{
   a = 1          // вот этот комментарий
}
 
pavlick_ :

Evet, yorum ekleyemiyorum. Numaralandırmaları yorumlamak için hatalı sözdizimi.

/*...*/ içine alın.
 
fxsaber :
/*...*/ içine alın.
İşte öyle bir saçmalık ki, önişlemci yorumları yemek istemiyor (hem // hem de /*), makroları genişletirken onları görmeyi beklemiyor. Ya önişlemcinin kurallarını değiştirin ya da numaralandırmaları yorumlamak için alternatif bir yol tanıtın (yorum, komut dosyası ayarlarda çalıştırıldığında görüntülenecektir), şöyle:

enum E {
   a = 1,            --**--  Комментарий_1
   b = 2            --**--  Комментарий_2
};
Burada güçsüzüm.
 
pavlick_ :
İşte öyle bir saçmalık ki, önişlemci yorumları yemek istemiyor (hem // hem de /*), makroları genişletirken onları görmeyi beklemiyor. Ya önişlemcinin kurallarını değiştirin ya da numaralandırmaları yorumlamak için alternatif bir yol tanıtın (yorum, komut dosyası ayarlarda çalıştırıldığında görüntülenecektir), şöyle:

enum E {
   a = 1,            --**--  Комментарий_1
   b = 2            --**--  Комментарий_2
};
Burada güçsüzüm.
 

Önişlemci tarafından işleme birkaç aşamada gerçekleşir. Öncelikle tüm yorumlar kaynaktan kaldırılır ve bu sonuç işlenir. Ve önişlemcinin bir yorumla karşılaşmayı beklemediği yer burasıdır (makroları genişlettiğinde). Toplantı bir hata olarak kabul edilir. Örneğin burada:

 #define COMMENT / ## /

void OnStart ()
{
  COMMENT
}
İlk bakışta zararsız kod, bir yorum eklemelidir. Ama derlemeyecek.