Hatalar, hatalar, sorular - sayfa 2417

 
Alexey Navoykov :

Derlemediğini biliyorum. Sözdizimi kontrolünden bahsediyoruz (buna ME'de "Derleme" terimi de denir), çünkü son yazıda bunu parantez içinde bile belirttim. C++ derleyicisi ayrıca bir sözdizimi denetimi de çalıştırırsa (genellikle komut satırı aracılığıyla), o zaman güzel bir yemin eder.

Belirtilmemişse bakın:

B b;

sonra C++ bu kodu gayet iyi derler. Yani sözdizimi doğrudur. Problem nesne seviyesinde başlar, çünkü orası sınıf nesnelerinin tahsis edileceği yerdir.

Başlıkta kullanılıp kullanılmadığını gerçekten kontrol etmediğiniz bir şablon hayal edin. Bu durumda derleyici ne yapmalıdır? Veya diyelim ki yapı için std:lower uygulamanız gerekiyor ve *.h'de herhangi bir uygulama yok... Ayrıca derleyici doğrulama aşamasında yemin etmemelidir.

Bu koda küfretmek için komut satırından *.h sözdizimini nasıl kontrol ettiğinizi açıklayabilir misiniz? ilginç oldu)

 
Andrey Pogoreltsev :

Belirtilmemişse bakın:

sonra C++ bu kodu gayet iyi derler. Yani sözdizimi doğrudur.

Mantığınız ilginç) Ve tüm kodu silerseniz, sözdizimi daha da doğru mu? ) Belirli bir kod verdim. B sınıfının yanlış olduğundan söz edilmedi. Statik yöntemleri vb. çağırmak için kullanmak oldukça mümkündür.

Başlıkta kullanılıp kullanılmadığını gerçekten kontrol etmediğiniz bir şablon hayal edin. Bu durumda derleyici ne yapmalıdır?

Kavramları değiştirmeyin. Şablon, yalnızca beton türlerine göre genişletildiği anda kontrol edilir, bu anlaşılabilir bir durumdur.

Bu koda küfretmek için komut satırından *.h sözdizimini nasıl kontrol ettiğinizi açıklayabilir misiniz? ilginç oldu)

Burada anlatmayacağım çünkü. Bu tür teflerle uğraşmadım ama kendime başlığı derleyen VS için bir makro yazdım. Bunu yapmak için, mevcut belge modunu anında cpp olarak değiştirir, derler ve sonra geri döndürür. Basit ve zevkli.

Stüdyonun neden başlıkların sözdizimini kontrol etmek için normal bir seçeneği olmadığını hiç anlamıyorum. Doğru, oldukça eski bir sürüm kullanıyorum, belki bu zaten ortaya çıktı.

 
Alexey Navoykov :

Stüdyonun neden başlıkların sözdizimini kontrol etmek için normal bir seçeneği olmadığını hiç anlamıyorum.

Ctrl+F7 , bu kombinasyon muhtemelen en azından 2008 stüdyosundan başlıyor - ayrı bir dosya derleyin
 
TheXpert :
Ctrl+F7 , bu kombinasyon muhtemelen en azından 2008 stüdyosundan başlıyor - ayrı bir dosya derleyin
Başlıklarla ilgiliydi. Ve bu kombinasyon cpp'yi ifade eder. En azından benim 2010 stüdyomda öyle.
 

Göndermeden önce uzun süre tereddüt ettim, zanaatımı iki kez kontrol ettim, ancak yine de test cihazında bir sorun vardı ...

Test, kelimenin tam anlamıyla başlangıçta kesintiye uğradı:

Hiçbir şeyi değiştirmeden ikinci kez "start" a basıyorum, sona gidiyor (kesildiği yerde kısa bir duraklama ile):

Birkaç yaklaşım daha yaptım - sonuçlar kesinlikle değişiyor (birbiri ardına, çift / tek). "Kırılma" yerine kadar denge grafikleri benzerdir. Tekrar ediyorum, hiçbir şeyi değiştirmiyorum, sadece "Başlat" ı tıklıyorum

Büyük olasılıkla bu, başka bir karakter eklediği andır (neden testin başlangıcından itibaren 5'in tamamı değil?):


Belleğin gerçek kullanılabilirliği sorusunu bir kenara bırakırsak (görev yöneticisine göre, boş 1.2-1.4GB, yani mesajla eşleşir), aynı testi yürütmek için farklı miktarlarda belleğe ihtiyaç duyulamaz mı? Ve rapora göre 400 MB yeterliyse, 1.2 GB'de bu tür üç test çalıştırabilirsiniz...

Ek veriler: 5 sembol üzerinde test, çubukların açılışında, H1, 2004... bugün. Gövde, 500 elemanlı 7 çift dizi ve bir küçük dizi yapısı içerir (her karakter için veri depolar, yani bu durumda 5 x 13), boyutlar başlatma sırasında ayarlanır ve artık değişmez, yani. hafızayı yok edecek hiçbir şey yok. Kod prosedürel, basit, küçük, özyinelemeler ve eklenti kitaplıkları olmadan.

Dört karakterde - 6-7-8'de çalışır - 5'tekiyle aynı hikaye - zaman içinde. Bu durumda, yeni bir sembol ekledikten sonra ilk kez - her zaman geçer, sonraki - hayır, sonra tekrar geçer, vb.

Belleğin zamanında serbest bırakılmadığına dair şüpheler var, sadece eksikliğiyle ilgili bir hatanın varlığı.

Toplam 3 sorun:

  • ayarlarda veya kodda değişiklik olmadığında testi her seferinde (kesinlikle) geçer
  • birkaç test için yeterli boş bellek var (başarılı bir geçişten sonraki mesaja göre), ancak eksikliğiyle ilgili bir hata var (denemelerde bile). ("başarılı" 400 kullanıldı, 1200 hatasız oldu)
  • bazı karakterler testin ortasına bağlanır, eğer bir geçmiş varsa (bu, senkronizasyon günlüğünden görülebilir). Tüm sembollerin her yeni çubuğunda sinyal yoklama (bir döngüde)

 
Alexey Navoykov :
Başlıklarla ilgiliydi. Ve bu kombinasyon cpp'yi ifade eder. En azından benim 2010 stüdyomda öyle.
evet (ve yönteminiz başlık için boş bir cpp yapmaktan daha uygun görünüyor
 

Neden yasak?

 void fn( const int &) {}

void start() {
   fn( 5 );   // parameter passed as reference, variable expected

}
 
Vict :

Neden yasak?

yani eski zamanlardan beri böyle. yalnızca değere göre değişmezler. neden - xs, geliştiricilere sormalısın
 
TheXpert :
yani eski zamanlardan beri böyle. yalnızca değere göre değişmezler. neden - xs, geliştiricilere sormalısın

Bir parametreyi referans olarak iletmek, bellekte tahsis edilmiş bir değişkenin varlığını varsayar.

Sabitler hiçbir yerde saklanmaz, doğrudan kullanılır.

 
TheXpert :
yani eski zamanlardan beri böyle. yalnızca değere göre değişmezler. neden - xs, geliştiricilere sormalısın

Mazoşistler adına. Standart kütüphane beni etkilemedi, vektöre benzer bir şey yazmaya karar verdim, ancak "yongaların" bolluğu nedeniyle bir kusur daha elde ettik.

 void push_back( const T & value );