Şablon parametreli derleyici hatası = void* - sayfa 4

 
Dmitry Fedoseev :

Bu linki kendiniz okumayı denediniz mi? Orada Slava bunun neden böyle olduğunu açıklıyor - çünkü öncelik eski MQL4'te karışıktı. O yüzden şimdi dikkat çekmek önemli. Sadece bir uyarı olması bile kötü, bir hata olsaydı daha iyi olurdu.

Ya da tokat

 
Dmitry Fedoseev :

Bu linki kendiniz okumayı denediniz mi? Orada Slava bunun neden böyle olduğunu açıklıyor - çünkü öncelik eski MQL4'te karışıktı . O yüzden şimdi dikkat çekmek önemli. Sadece bir uyarı olması bile kötü, bir hata olsaydı daha iyi olurdu.

Ne olmuş? Burada:

 int i = 1 << 2 + 3 ;

MQL4'te de öncelik karışık mıydı? Bu genel bir yaklaşımdır, özel bir durum değildir. belirtilen belirli bir durumda, bir uyarı \ hatası verebilir ve vermelidir (istisna olarak), ancak neden diğer her şeye genişletilmelidir?

Ayrıca, MQL4'te (bildiğim kadarıyla) || operatörü tembellik yoktu. Ve buna rağmen, MQL5 derleyicisi benzer durumlarda bir uyarı vermez ( ||'yi birkaç atomik işleme bölmeyi önermez)

Tarihin ilgili sayfasının çevrildiği buradan kaynaklanır.

 

Şunu da ekleyeceğim ... Belgeler bile şunları söylüyor:

" İşlemlerin sırasını değiştirmek için en yüksek önceliğe sahip parantezleri kullanın"

bu, parantezlerin başka amaçlar için kullanılmasının (yeniden sıralama ile ilgili olmayan) hala gerekçelendirilmesi gerektiğini ima eder

 
fxsaber :

Merak ediyorum, şüphe duymanız gerektiğinde programcı sayısının eşiği nerede? 5 - birkaç. 1000 yetmez. 10.000 - düşün. Ve son olarak, N - güveniyorum. Ancak, (N-1) olduğunda - hala güvenmiyordu.

Eşik, mutlak terimlerle değil, aksini düşünenlerin sayısının yüzdesi olarak tanımlanır. Çoğu yanlış olabilir, ancak %99 değil - bu güvenilir bir kriterdir

 
A100 :
Ve 1961x32'de her şey çalışıyor... gaf!

Hmm, ilginç bir özellik. Bundan sonra platformun bit derinliğini de belirteceğim.

 
A100 :

Ne olmuş? Burada:

 int i = 1 << 2 + 3 ;

MQL4'te de öncelik karışmış mıydı?

Evet, belgeler eski sürümde önceliğin farklı olduğunu söylüyor.

Ancak bence, tüm bunlar uzun zamandır alaka düzeyini kaybetti. Ve dahası, katı direktif belirtilmişse. Ve eğer birisi eski kodu kazıp onu derlemeye çalışırsa, o zaman oradaki her şeyi yine de yeniden yapmak zorunda kalacak. Yani bu uyarılar zaten geçmişin bir kalıntısı. Bu nedenle, uyarıların birdenbire dağılmaması gerektiğine katılıyorum.

 
Üzgünüm, konuyla ilgili değil, bilen varsa söyleyin: mql'de void*ptr'den (int) StringFormat ("% i",ptr) dışında bir int almanın bir yolu var mı?
 
A100 :

Bu nedenle, kodunuzda parantezler hiçbir şey ifade etmiyor, ifade ... mantıksız görünüyor ve parantezlerin varlığında, önceliklerin / sıranın gerçekten değişip değişmediğini ve kodumda - parantezlerin olup olmadığını anlamanız gerekiyor. kendi başlarına önceliklerde / düzende bir değişiklik anlamına gelir (zaten parantezlerin varlığı / yokluğu açıktır)

parantez
fxsaber
A100
orada
belirsiz
operasyon öncelikleri değişti
Numara
operasyon öncelikleri değişmedi
operasyon öncelikleri değişmedi

Parantezler, ifadenin yorumlanmasında tam bir belirsizlik sağlar.

Uyarıların kendileri (sadece parantezler hakkında değil) bir hata hakkında değil, bir hata olasılığı hakkındadır. Uyarılardan tamamen kurtulmayı teklif ediyorsun, tk. öncelikler (yalnızca parantez içinde değil) derleyicide açıkça belirtilmiştir.

A100 :

Eşik, mutlak terimlerle değil, aksini düşünenlerin sayısının yüzdesi olarak tanımlanır. Çoğu yanlış olabilir, ancak %99 değil - bu güvenilir bir kriterdir

Miktarla ilgili aynı soru mutlak değil, görecelidir. %98 güvenilir bir kriter midir? Ve %97? Güvenilirlikten şüphe etmeye başlamanız gerektiğinde eşik nerede? Evet, etrafındaki herkesin en az %100'ü senin bir manyak katil olduğunu iddia ediyor. Bu güvenilir bir kriter mi?

 
Ilya Malev :
Üzgünüm, konuyla ilgili değil, bilen varsa söyleyin: (int)StringFormat("%i",ptr) dışında mql'de void*ptr'den int almanın bir yolu var mı?

yalnızca dizeler aracılığıyla, işaretçinin adresini StringConcatenate () aracılığıyla alırdım, bunun gibi bir şey:

Cinteger *x = new Cinteger();
   string s;
   int zz= StringConcatenate (s, "*x = " ,x);
   Print ( "OK " ,s);
 
Alexey Navoykov :

En banal örnek dizi sınıfıdır. Bu durumda, herhangi bir işaretçiyi saklamak için kullanılır:

Dürüst olmak gerekirse, böyle bir dizinin şüpheli yararı. Onunla ne yapabilirsin? Dizi üyeleri için silme işleminin otomatik olarak çağrılmayacağını biliyor musunuz?