Errores, fallos, preguntas - página 2867

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

Lo tengo, lo interpreté de manera diferente aquí.

Al fin y al cabo, no es una constante, sino una macro.

Gracias.
 
fxsaber:

Por lo tanto, es idéntica a la acción de MACRO y MACRO2.

Para el usuario final, sí, se utiliza una macro con dos parámetros

 
A la pregunta sobre las advertencias útiles y perjudiciales:
#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

¿Qué hace un compilador Shell C++ inteligente? ¡Correcto! Donde hay un error de imprenta evidente y en la línea (1) - falta la "x

    A( int x, int y ) :

- genera la advertencia: 'A::x' se inicializa con ella misma. ¡Y no muestra nada en los lugares donde está bien!

¿Y qué hace el compilador MQL?

#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

Se calla cuando lo necesita y hay una errata evidente, pero cuando no lo necesita y todo está bien, avisa: la declaración de 'y' oculta el miembro

¿Por qué es al revés?
 

2632

Cuando está en pausa en la prueba visual, no es posible navegar (rebobinar/avanzar) por el gráfico utilizando el ratón de arrastre o las teclas de flecha.

 

Veo que el tema de las macros ha tomado fuerza, yo también tengo algunas preguntas

¿Por qué se utilizan int y uint para C y D?
¿Dónde deben sustituirse long y ulong
o tal vez el compilador es tan inteligente que detecta el tamaño de 280 y lo optimiza?

#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


La segunda pregunta.
¿Por qué hay un error de compilación para 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


La tercera pregunta.

#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:

Veo que el tema de las macros ha tomado fuerza, yo también tengo algunas preguntas

¿Por qué se utilizan int y uint para C y D?
¿Dónde deben sustituirse long y ulong
o tal vez el compilador es tan inteligente que detecta el tamaño de 280 y lo optimiza?


La segunda pregunta.
¿Por qué hay un error de compilación para float?


La tercera pregunta.

1. L es larga, pero c++. Pruebe LL
2. f
3 '\n' es char
 
Vladimir Simakov:
1. L es largo, pero c++. Prueba con LL.
2. f
3 '\n' es char.

Sí, funciona.
Pero el tipo de carácter '+' muestra ushort
Fits como un tamaño de cadena de 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:

Sí. Funcionó.
Pero el tipo de carácter '+' muestra ushort
Lo establece como un tamaño de cadena de 2 bytes

¿Por qué iba a hacer eso?

¿Es un error o un fallo o algo así?

 
Vladimir Simakov:

¿Por qué es así?

¿Es un fallo o un error o algo así?

No lo sé.
¿Tal vez sea el Unicode?

 
Roman:

Quién sabe.
¿Tal vez sea el Unicode?

No, la lógica de los desarrolladores es comprensible, pero para mí, prefiero especificar u'y' explícitamente cuando y si lo necesito