Fehler, Irrtümer, Fragen - Seite 1331

 

Zum Beispiel so - das wäre wirklich zweideutig

void f( uint )  { Print( __FUNCSIG__ ); }
void f( int  )  { Print( __FUNCSIG__ ); }
void OnStart()
{
        char ch = 0;
        f( ch ); // неопределенность 
}

was merkwürdigerweise vom Compiler überwunden wird, wenn man das Beispiel anders schreibt

#import "Test.ex5"
        void f( uint );
#import
        void f( int  )  { Print( __FUNCSIG__ ); }
void OnStart()
{
        char ch = 0;
        f( ch ); // вызывается f(int), а должна генерироваться неопределенность
}
 
Deine Wahrheit
 
Ich weiß nicht, ob dies schon einmal erwähnt wurde. Wenn im MetaEditor der Name der Eingabevariable mit dem Namen der lokalen Variable (oder dem Namen des Klassenfeldes) übereinstimmt, wird letztere überall rot hervorgehoben, genau wie die Eingabevariable. Dies führt zu Verwirrung beim Lesen des Codes. Wir sollten dies beheben.
 
Alexey Navoykov:
Ich weiß nicht, ob das schon einmal gesagt wurde. Wenn im MetaEditor der Name einer Eingabevariablen mit dem Namen einer lokalen Variablen (oder eines Klassenfeldes) übereinstimmt, wird letztere überall rot markiert, ebenso wie die Eingabevariable. Das führt zu Verwirrung beim Lesen des Codes. Wir sollten dies beheben.

Die Vergabe von identischen Namen für Codeeinheiten ist ein Versuch, sich selbst in den Fuß zu schießen :)

Es ist einfacher, den Namen einer Eingabevariablen zu ändern, und Sie werden keine Probleme und Verwirrung haben...

 

MT4/845, Windows7/64 bit. Frage zu Text in einer neuen Zeile mit \n. Ich habe ein Skript erstellt:

#property strict

string t1="Text_1";
string t2="Text_2";

void OnStart()
  {
   Print(t1+"\n "+t2);
   Print("Text_3"+"\n Text_4");
  }

Ergebnis:


Ich hatte gehofft, dass die Werte von Text_2 und Text_4 in anderen Zeilen stehen würden. Bitte sagen Sie mir, was los ist.

 
Konstantin Karpov:

Die Vergabe von identischen Namen für Codeeinheiten ist ein Versuch, sich selbst in den Fuß zu schießen :)

Es ist einfacher, den Namen einer Eingabevariablen zu ändern, und Sie werden keine Probleme oder Verwirrung haben...

Ihr Ratschlag ist in der Praxis bedeutungslos. Niemand vergibt absichtlich identische Namen. Der lokale Funktionscode führt ein Eigenleben, während das externe Programm ein Eigenleben führt. Und die Namen externer Variablen können sich im Laufe der Zeit ändern und neue externe Variablen können hinzugefügt werden.Und wenn dann plötzlich eine von Hunderten von Funktioneneine lokale Variable mit demselben Namen hat, was meinen Sie, sollten wir die globale Variable umbenennen? Sie sollten nicht nach Ausreden für die Fehler der Entwickler suchen.
 

MT4/845, Windows7/64 bit. Drehbuch:

#property strict

double d1 = 2.009745110811111111111111111;
double d2 = 3.654;
double d3;
//---
void OnStart()
  {
   d3=d1/d2;
   Print("A: d3 = ",DoubleToString(d3));
   Print("B: d3 = ",DoubleToStr(d3));
   Print("C: d3 = ",DoubleToString(d3,16));
   Print("D: d3 = ",DoubleToString(d3,8));
   Print("E: d3 = ",DoubleToString(NormalizeDouble(d3,8)));
   Print("F: d3 = ",DoubleToString(NormalizeDouble(d3,7)));
   Print("G: d3 = ",DoubleToString(NormalizeDouble(d3,8),7));
   Print("H: d3 = ",DoubleToString(NormalizeDouble(d3,8),8));
  }
//+------------------------------------------------------------------+

Ergebnis:


Weiß jemand, wie man die Zahl 0,55001234 druckt?

 
Maxim Khrolenko:

MT4/845, Windows7/64 bit. Drehbuch:

Ergebnis:


Weiß jemand, wie man die Zahl 0,55001234 druckt?

 Print("C: d3 = ",DoubleToString(d3,8));

 
Maxim Khrolenko:

MT4/845, Windows7/64 bit. Frage zu Text in einer neuen Zeile mit \n. Ich habe ein Skript erstellt:

Anscheinend ein Fehler in MT4 (in MT5 ist alles in Ordnung)
 
A100:
Offenbar ein Fehler in MT4 (MT5 ist in Ordnung)
Verstehe, ich hoffe, die Entwickler beachten das.