Hatalar, hatalar, sorular - sayfa 2025

 

Yürütmede çift hata

 #define XY( X, Y )      X ##Y
#define f( X )  XY( g, X )
#define MACRO1( X )     #X
#define MACRO2( X )     MACRO1( X )
#define SIZE     5
void OnStart ()
{
     printf ( "%s", MACRO2( f( SIZE )));
}

Sonuç: f(BOYUT)

ama şöyle olmalı: g5

 
leonerd :

Test görselleştirme tablosundan oklar nasıl kaldırılır? Test etmeye başlıyorum ve son testin girdilerinden hala oklar ve çizgiler var.

tester.tpl şablonunu temizleyin, nesneler büyük olasılıkla oradadır.

 
A100 :

Yürütmede çift hata

Sonuç: f(BOYUT)

ama şöyle olmalı: g5


Bence mantıklı bir sonuç.

 
fxsaber :
Bence mantıklı bir sonuç.

Beklenen: Önce iç makro SIZE, ardından ara f( X ) ve son olarak dış MACRO2( X ) ikamesi

Ancak tamamlanmamış mantık kullansanız bile sonuç farklıdır:

 #define MACRO1( X )     #X
void OnStart ()
{
     printf ( "%s" , MACRO1( f( SIZE )));
}
//Результат  :f(SIZE)
//должен быть:f( SIZE )

en azından boşluk farkı

 
A100 :

Beklenen: İlk olarak iç SIZE makrosunun, ardından ara f( X ) ve son olarak dış MACRO2( X )'in ikamesi

Ancak tamamlanmamış mantık kullansanız bile sonuç farklıdır:

en azından boşluk farkı

İşlevlerin önceliği, elbette, içten dışa doğrudur. Ama makrolar tam tersi.

#X - boşluksuz dize. Buna katılmayabilirsiniz elbette.

 
fxsaber :

İşlevlerin önceliği, elbette, içten dışa doğrudur. Ama makrolar tam tersi.

#X - boşluksuz dize. Buna katılmayabilirsiniz elbette.

Ve neden bu tür atamalara sahip basit eski kurallar varsa - geniş bir insan çevresi tarafından bilinen ve onlarca yıldır yerleşmiş kurallar varsa, neden eski atamalarla yeni karmaşık kurallar ortaya çıkıyor? Kurallar yeniyse, atamalar yeni olmalıdır.

 
A100 :

Yürütmede çift hata

Sonuç: f(BOYUT)

ama şöyle olmalı: g5

Bir yıl önce servis masasına benzer bir istek gönderdim (#1600034)   hala cevapsız kalıyor. Görünüşe göre tüm bu "geek" böcekleri umurlarında değil. Ve genel olarak, görünüşe göre artık dili geliştirmek niyetinde değiller. Yalnızca büyük hatalar kuralı ve daha fazlası değil.
 
A100 :

Ve neden bu tür atamalara sahip basit eski kurallar varsa - geniş bir insan çevresi tarafından bilinen ve onlarca yıldır yerleşmiş kurallar varsa, neden eski atamalarla yeni karmaşık kurallar ortaya çıkıyor? Kurallar yeniyse, atamalar yeni olmalıdır.

Tam olarak ne hakkında konuşuyoruz? Ve nasıl olmalı?

 
fxsaber :

Tam olarak ne hakkında konuşuyoruz? Ve nasıl olmalı?

#X - olduğu gibi dize - yani boşluklarla (varsa). Ve yukarıdaki örneğe bakın f( SIZE ) -> g5. Bu kuralları kendim bulmadım - C++ derleyicileri böyle yapar

 
Alexey Navoykov :
Bir yıl önce servis masasına benzer bir istek gönderdim (#1600034)   hala cevapsız kalıyor. Görünüşe göre tüm bu "geek" böcekleri umurlarında değil. Ve genel olarak, görünüşe göre artık dili geliştirmek niyetinde değiller. Yalnızca büyük hatalar kuralı ve daha fazlası değil.

Dün tesadüfen bununla karşılaştım ve nasıl birleştiğine şaşırdım.

 template<typename T, int n>

birkaç düzine kod satırı, kelimenin tam anlamıyla bir veya iki (!) Bu yüzden yazdım - ilk bakışta bazı önemsiz saçmalıklar görünebilir. C++'da saçmalık olmadığına bir kez daha ikna oldum.