Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
evet, karşılığında bir şey döndürmeniz gerekiyorsa ().
veya en azından derleyicinin işlevin bir şey döndüreceğinden emin olması için:
switchancak genel olarak, void dışındaki tüm işlevler için
bu kodu derlemeye çalışın:
derleme yapmaz.
ve şimdi yorumsuz:
//return(((In-InMIN)*(OutMAX-OutMIN)/(InMAX-InMIN))+OutMIN);ve bir mucize olacak! :)
El Kitabına göre bool, tamsayılardan farklı özel bir türdür... Bu nedenle yanlış ifademi kaldırdım. Her ne kadar tartışmayacağım - özel değil.
Vaka etiketlerini değil, numaralandırmaları kastettim (bool türünü en küçüğü olarak kabul ederek). İşte aynı derleme hatasına sahip bir örnek:
Bu nedenle soruyu bu örnekle ilgili olarak tekrar edeceğim: Derleyicinin Üçlü numaralandırmadaki değerler listesini ve bunların toplam sayısını dikkate almadığını mı söylüyorsunuz? Switch deyiminde kullanılan numaralandırmadaki tüm değerlere sahibim.
Derleyici (geliştiriciler) anladığım kadarıyla reasüranslı. Sonuç olarak, değişken açıkça başlatılmazsa, türe bağlı olarak false / 0 değeri atanacaktır (ikincisi numaralandırmalar için geçerlidir).
Ancak olası seçeneklerin sınırlarını aşan bir değer parametre olarak alınırsa (Üçlü örnekte bunlar -1 - +1 aralığına ait olmayan herhangi bir değer olabilir), yürütülürken ciddi sorunlar ortaya çıkacaktır. varsayılan bir sonuç olmadan.
Varsayılan seçenek hariç tutulursa işlev ne döndürmeli?
Bence ENUM_CHART_MODE numaralandırmasındaki son değer. Şimdi kontrol edeceğim.
...M-dya, işe yaramadı. Aşağıdakileri yazdırır: ChartMode=ENUM_CHART_MODE::-1Derleyici (geliştiriciler) anladığım kadarıyla reasüranslı. Sonuç olarak, değişken açıkça başlatılmazsa, türe bağlı olarak false / 0 değeri atanacaktır (ikincisi numaralandırmalar için geçerlidir).
Ancak parametre olarak olası seçenekler aralığının ötesine geçen bir değer varsa (Üçlü örnekte bunlar -1 - +1 aralığına ait olmayan herhangi bir değer olabilir), aşağıdaki durumlarda ciddi sorunlar ortaya çıkacaktır. varsayılan bir sonuç olmadan yürütülüyor.
Bu gerçekten bununla ilgili değil. Bir önceki paylaşımıma bakın.
Evet, derleyici en azından bir şey döndüreceğinden emin olmalıdır. Bunun makul bir reasürans olduğunu düşünüyorum (özellikle, örnekte anahtar işlerken bir temerrütün varlığı).
Başka bir şey, bir değer döndürmeniz gerekmiyorsa.
Bence ENUM_CHART_MODE numaralandırmasındaki son değer. Şimdi kontrol edeceğim.
...M-dya, işe yaramadı. Aşağıdakileri yazdırır: ChartMode=ENUM_CHART_MODE::-1Tüm bu karmaşıklıkların derinliklerine inmek istiyorsanız, Bjorn Stroustrup, C++ okuyun.
Dürüst olmak gerekirse, özellikle MQL5 belgelerini okumadım bile - sadece C++ gibi yazıyorum. Geliştiriciler bu dilin standartlarını oldukça yakından takip ederler.
Tünaydın!
466 oluşturun.
Başlıyorum, bir bağlantı belirir ve birkaç kilobayt indirilir yüklenmez terminal kapanır. İnterneti kapatıyorum - kapanmıyor.
/logs/Crash/ dizininden bir dosya ekliyorum
Sorunun çözümü var mı?
teşekkürler
)) bağlı değil. İşte metin:
Saat : 2011.06.16 10:28 (0:00:11)
Program : İstemci Terminali
Sürüm : 500.466 (09 Haz 2011)
Revizyon: 32925
İşletim Sistemi : Windows 7 Professional Service Pack 1 (Derleme 7601)
İşlemciler : 2 x AMD Athlon 64 X2 Çift Çekirdekli İşlemci 5000+
Bellek : 911 ücretsiz 1983 Mb
Sanal : 1815 ücretsiz 2047 Mb
CrashMD5 : 2219A3BB7215B179256A7E41D40BD511
İstisna: 007B41B4'te C00000094 NA ila 00000000
Modüller : 00400000 00B96000 terminal.exe (5.0.0.466)
: 6FDC0000 00027000 wlidnsp.dll (7.250.4225.0)
007B41A0:00014 [007B41B4] #22663 (terminal.exe)
774D58FC:00C74 [774D6570] strcspn (ntdll.dll)
774D58FC:00CAA [774D65A6] strcspn (ntdll.dll)
74A5DC14:000EC [74A5DD00] func_0x74A5DC14 (dbghelp.dll)
74A5E10D:0016E [74A5E27B] SymGetLineFromAddr64 (dbghelp.dll)
74A5F73A:0085A [74A5FF94] func_0x74A5F73A (dbghelp.dll)
74A6189C:000D2 [74A6196E] func_0x74A6189C (dbghelp.dll)
74A5F73A:00A54 [74A6018E] func_0x74A5F73A (dbghelp.dll)
74A5DC14:000EC [74A5DD00] func_0x74A5DC14 (dbghelp.dll)
74A5E10D:0016E [74A5E27B] SymGetLineFromAddr64 (dbghelp.dll)
74A5F73A:0085A [74A5FF94] func_0x74A5F73A (dbghelp.dll)
74A6189C:000D2 [74A6196E] func_0x74A6189C (dbghelp.dll)
74A5F73A:00A54 [74A6018E] func_0x74A5F73A (dbghelp.dll)
774D68C7:000E0 [774D69A7] RtlLogStackBackTrace (ntdll.dll)
774D58FC:004D7 [774D5DD3] strcspn (ntdll.dll)
Kayıtlar : EAX=00000000 EIP=007B41B4 EFLGS=00010246 ES=0023
: EBX=00000000 ESP=0012E2CC EBP=0012E320 FS=003b
: ECX=00000000 ESI=04C74C48 CS=001b GS=0000
: EDX=00000000 EDI=00000007 DS=0023 SS=0023
Değer döndüren işlevlerde switch deyimini kullanma temasına devam etmek . Dün, "numaralandırma+anahtar" bağlaması kullanılırken varsayılan etiket kullanımının zorunlu hale geldiğine dair bir ara sonuç alındı ve onaylandı. Ama işte bu sonucun çürütüldüğü bir örnek:
Burada switch ifadesi iki kez uygulanır ve tekrar uygulandığında (2. seviye) varsayılan etiket hariç tutulur. Aynı operatör, aynı derleyici - ama işe yarıyor. Derleyicinin triple_var1 ve triple_var2 değişkenlerinde herhangi bir çöp bulma olasılığını dikkate aldığı ve aynı zamanda Üçlü numaralandırmadaki değerler listesini ve sayılarını dikkate almadığı varsayımlarından devam edersek, neden derleyici, switch ifadesini kullanmanın 2. düzeyinde bir hata bildirmiyor mu? Ara sonuçlarımız/varsayımlarımız yanlış mıydı, yoksa derleyici operatörleri yalnızca "1. düzeyde" kontrol etmekle mi sınırlı? Özellikle, anahtardan (triple_var 2 ) etiket(ler)i yorumlarsanız, Test() işlevi void türünde olmasa bile yine de hiçbir hata mesajı olmayacaktır.Switch (triple_var 1 ) deyimindeki herhangi bir büyük/küçük harf etiketinden sonra bir switch (triple_var 2 ) ifadesi ( varsayılan etiket olmadan) eklenirse benzer bir sonuç elde edilir.
Değer döndüren işlevlerde switch deyimini kullanma temasına devam etmek . Dün, "numaralandırma+anahtar" bağlaması kullanılırken varsayılan etiket kullanımının zorunlu hale geldiğine dair bir ara sonuç alındı ve onaylandı. Ama işte bu sonucun çürütüldüğü bir örnek:
Burada switch ifadesi iki kez uygulanır ve tekrar uygulandığında (2. seviye) varsayılan etiket hariç tutulur. Aynı operatör, aynı derleyici - ama işe yarıyor. Derleyicinin triple_var1 ve triple_var2 değişkenlerinde herhangi bir çöp bulma olasılığını dikkate aldığı ve aynı zamanda Üçlü numaralandırmadaki değerler listesini ve sayılarını dikkate almadığı varsayımlarından devam edersek, neden derleyici, switch ifadesini kullanmanın 2. düzeyinde bir hata bildirmiyor mu? Ara sonuçlarımız/varsayımlarımız yanlış mıydı, yoksa derleyici operatörleri yalnızca "1. düzeyde" kontrol etmekle mi sınırlı? Özellikle, anahtardan (triple_var2) etiketi/etiketleri yorumlarsanız, Test() işlevi void türünde olmamasına rağmen yine de hata mesajı olmayacaktır.Derleme kapsamı dışında olması durumunda olası tüm değerleri kapsayacak şekilde kontrol anahtarı.
MQL5'in bir "özelliği" olarak bu ilginç, neler yapılabileceğini düşüneceğiz.
Anahtar kontrolünün "özelliği" tartışıldı, doğru / doğru kontrolün uygulanması imkansız.
Switch ifadesinin değeri herhangi bir şey olabilir, örneğin: