Hatalar, hatalar, sorular - sayfa 2641

 
bool Func()
{
   for ( int i= 1 ;;++i)
  {
     if (i== 1 )
       continue ;
     if (i== 100 )
       return false ;
  }
}

void OnStart ()
{
  Func();
}

Böyle bir danışman var. hata veriyor

 '}' - not all control paths return a value      Test.mq5         10        1

Yorum yaparsanız devam edin sorun olmaz. Bunun garip olduğunu düşünen tek ben miyim?

 
traveller00 :

Böyle bir danışman var. hata veriyor

Yorum yaparsanız devam edin sorun olmaz. Bunun garip olduğunu düşünen bir tek ben miyim?

İşlev void olarak bildirilmezse, bir değer döndürmesi gerekir :

 bool Func()
{
   for ( int i= 1 ;;++i)
  {
     if (i== 1 )
       continue ;
     if (i== 100 )
       return false ;
  }
   //---
   return ( false );
}
 
Bu fonksiyondan çıkmanın tek yolu i==100'dür. Neden devam görünümünün işlevden ek bir çıkışın ortaya çıkmasına yol açtığını düşünüyor?
 
traveller00 :
Bu fonksiyondan çıkmanın tek yolu i==100'dür. Neden devam görünümünün işlevden ek bir çıkışın ortaya çıkmasına yol açtığını düşünüyor?

Tek veya çoklu çıkış - fark etmez. Önemli olan şey, SİZİN void dışında bir türde bir işlev bildirmiş olmanızdır - bu, işlevin bir değer döndürmesi ZORUNLUDUR.

 

İşlev ve dönüş değeri

 bool Func()
{
   for ( int i= 1 ;;++i)
  {
     if (i== 1 )
       continue ;
     if (i== 100 )
       return false ;
  }
}

Fonksiyondan çıkmanın tek yolu bu. Onlar. bir değer döndürmenin gerekli olduğu tek yer. Ve C/C++ derleyicisi benimle aynı fikirde. Bununla birlikte, MQL'nin bu konuda kendi standartları varsa, devam kaldırılırsa neden normal olarak monte edilir?

 
traveller00 :

İşlev ve dönüş değeri

Fonksiyondan çıkmanın tek yolu bu. Onlar. bir değer döndürmenin gerekli olduğu tek yer. Ve C/C++ derleyicisi benimle aynı fikirde. Bununla birlikte, MQL'nin bu konuda kendi standartları varsa, devam kaldırılırsa neden normal olarak monte edilir?

Derleyici, döngünün işlenip işlenmeyeceğini ve kod yürütmenin geri dönüşe ulaşıp ulaşamayacağını bilmiyor; Bu yüzden sigorta gerektirir.

 
Alexey Viktorov :

Derleyici, döngünün işlenip işlenmeyeceğini ve kod yürütmenin geri dönüşe ulaşıp ulaşamayacağını bilmiyor; Bu yüzden sigorta gerektirir.

C/C++ derleyicisi bunu çok iyi bilir. MQL derleyicisi, anladığım kadarıyla C/C++ derleyicilerinden birine dayanıyor. Ama yine, mantığın kendine ait olsa bile, neden devam etmeden biliyor da, devam ettikçe bu bilgi yok oluyor?

 
traveller00 :

C/C++ derleyicisi bunu çok iyi bilir. MQL derleyicisi, anladığım kadarıyla C/C++ derleyicilerinden birine dayanıyor. Ama yine, mantığın kendine ait olsa bile, neden devam etmeden biliyor da, devam ettikçe bu bilgi yok oluyor?

Muhtemelen böyle bir koda ilk bakışta sadece bir kişi

 bool Func()
{
   for ( int i= 1 ;;++i)
  {
     if (i== 100 )
       continue ;
     if (i== 100 )
       return false ;
  }
}
tereddüt etmeden ne olacağını anlayabilir. Benim düşünceme göre, iddialar MQL'ye değil, C ve C++'a karşı olmalıdır. Bu tür rastgele sövelere karşı koruma sağlayan mql'dir.
 
traveller00 :

İşlev ve dönüş değeri

Fonksiyondan çıkmanın tek yolu bu. Onlar. bir değer döndürmenin gerekli olduğu tek yer. Ve C/C++ derleyicisi benimle aynı fikirde. Bununla birlikte, MQL'nin bu konuda kendi standartları varsa, devam kaldırılırsa neden normal olarak monte edilir?

Senin bu işlevin bir cant. i==100 ise, aynı i==100 için bir sonraki kontrol çalışmayacaktır. Ve bu sonsuz bir döngü olacak.

 
Sevgili geliştiriciler, lütfen hataya dikkat edin.
Обсуждение статьи "Торговый эксперт с графическим интерфейсом: Наполнение функционалом (Часть II)"
Обсуждение статьи "Торговый эксперт с графическим интерфейсом: Наполнение функционалом (Часть II)"
  • 2018.06.10
  • www.mql5.com
Опубликована статья Торговый эксперт с графическим интерфейсом: Наполнение функционалом (Часть II): Автор: Anatoli Kazharski...