Fehler, Irrtümer, Fragen - Seite 2867

 
A100:
#define  TMP VALUE      // TMP = 10 VALUE

Ich habe es verstanden, hier habe ich es anders interpretiert.

Es handelt sich schließlich nicht um eine Konstante, sondern um ein Makro.

Ich danke Ihnen.
 
fxsaber:

Die Funktionsweise ist also identisch mit MACRO und MACRO2.

Für den Endbenutzer wird ein Makro mit zwei Parametern verwendet

 
Zur Frage nach nützlichen und schädlichen Warnungen:
#ifdef __cplusplus
class A {
    A( int  , int y ) :         //(1)
                        x( x ), //(2) warning: 'A::x' is initialized with itself
                        y( y )  //(3)
                    {}
    int x, y;
};
#endif

Was macht ein Smart Shell C++ Compiler? Genau! Offensichtlicher Druckfehler und in Zeile (1) - fehlendes "x

    A( int x, int y ) :

- erzeugt es die Warnung: 'A::x' ist mit sich selbst initialisiert. Und an den Stellen, an denen es OK ist, wird nichts angezeigt!

Und was macht der MQL-Compiler?

#ifdef __MQL__
class A {
    A( int  , int y ) :         //(1) warning: declaration of 'y' hides member
                        x( x ), //(2) нормально
                        y( y )  //(3)
                    {}
    int x, y;
};
#endif

Er ist still, wenn er ihn braucht und es einen offensichtlichen Druckfehler gibt, aber wenn er ihn nicht braucht und alles in Ordnung ist, warnt er: declaration of 'y' hides member

Warum ist es andersherum?
 

2632

Wenn der visuelle Test pausiert, ist es nicht möglich, das Diagramm mit der Maus oder den Pfeiltasten zu durchsuchen (zurück- oder vorzuspulen).

 

Wie ich sehe, hat das Thema Makros an Fahrt aufgenommen, ich habe auch einige Fragen

Warum werden int und uint für C und D verwendet?
Wo sollten long und ulong ersetzt werden
oder ist der Compiler vielleicht so schlau, dass er die 280er Größe erkennt und sie optimiert?

#define  A 280    // int
#define  B 280 U   // unsigned int
#define  C 280L   // long
#define  D 280LU  // unsigned long
#define  K 28.0   // double

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   Print(typename(A));
   Print(typename(B));
   Print(typename(C));
   Print(typename(D));   
   Print(typename(K));
}
2020.10.07 01:57:47.788 TestScript (EURUSD,M1)  int
2020.10.07 01:57:47.788 TestScript (EURUSD,M1)  uint
2020.10.07 01:57:47.788 TestScript (EURUSD,M1)  int
2020.10.07 01:57:47.788 TestScript (EURUSD,M1)  uint
2020.10.07 01:57:47.788 TestScript (EURUSD,M1)  double


Die zweite Frage.
Warum gibt es einen Kompilierungsfehler für float?

#define  L 28.0 F  // float

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   Print(typename(L));
}
'TestScript.mq5'                TestScript.mq5  1       1
'F' - undeclared identifier     TestScript.mq5  36      19
'F' - some operator expected    TestScript.mq5  36      19
2 errors, 0 warnings                            3       1


Die dritte Frage.

#define  E '\n'         // char
#define F B'111111111' // int
#define  J ""           // string

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   Print(typename(E));
   Print(typename(F));
   Print(typename(J));
}
2020.10.07 04:55:00.406 TestScript (EURUSD,M1)  ushort
2020.10.07 05:41:01.204	TestScript (EURUSD,M1)	uint
2020.10.07 04:55:00.406 TestScript (EURUSD,M1)  string
 
Roman:

Wie ich sehe, hat das Thema Makros an Fahrt aufgenommen, ich habe auch einige Fragen

Warum werden int und uint für C und D verwendet?
Wo sollten long und ulong ersetzt werden
oder ist der Compiler vielleicht so schlau, dass er die 280er Größe erkennt und sie optimiert?


Die zweite Frage.
Warum gibt es einen Kompilierungsfehler für float?


Die dritte Frage.

1. l ist lang, aber c++. Versuchen Sie LL
2. f
3 '\n' ist ein Zeichen
 
Vladimir Simakov:
1. L ist lang, aber C++. Versuchen Sie LL.
2. f
3 '\n' ist ein Zeichen.

Ja, es funktioniert.
Aber der Zeichentyp '+' zeigt unshort
Fits als eine Stringgröße von 2 Bytes

#define A 280          // int
#define B 280 U         // unsigned int
#define C 280 LL        // long
#define D 280 LLU       // unsigned long
#define E 28.0         // double
#define F 28.0 f        // float
#define J '+'          // char
#define K B'111111111' // int

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   Print(typename(A));
   Print(typename(B));
   Print(typename(C));
   Print(typename(D));   
   Print(typename(E));
   Print(typename(F));
   Print(typename(J));
   Print(typename(K));
}
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  int
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  uint
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  long
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  ulong
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  double
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  float
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  ushort
2020.10.07 07:01:07.127 TestScript (EURUSD,M1)  uint
 
Roman:

Ja, es hat funktioniert.
Aber der Zeichentyp '+' zeigt unshort
Er setzt es als eine Stringgröße von 2 Bytes

Warum sollte sie das tun?

Ist es ein Fehler oder ein Bug oder etwas anderes?

 
Vladimir Simakov:

Warum ist das so?

Ist es ein Fehler oder eine Funktion?

Ich weiß es nicht.
Vielleicht liegt es am Unicode?

 
Roman:

Wer weiß.
Vielleicht liegt es am Unicode?

Nein, die Logik der Entwickler ist verständlich, aber für mich ist es besser, u'y' explizit anzugeben, wenn und falls ich es brauche.
Grund der Beschwerde: