Errores, fallos, preguntas - página 1837

 
fxsaber:
Eso es cero.

Sí, lo tengo. En efecto, ¿cómo puede haber una orden con TRADE_TRANSACTION_DEAL_ADD...

Gracias.

 
sizeof-bug
void f( uchar &Array[] )
{
  Print(sizeof(Array));
}

void OnStart( void )
{
  uchar Bytes[1];
  
  Print(sizeof(Bytes));
  
  f(Bytes);
}

Resultado
1
52
 

Durante las pruebas, el registro no indica la hora a la que expira la orden:

2017.03.30 22:12:30.271 Core 1 2017.01.18 16:55:00 límite de compra 0.01 EURUSD a 1.06789 (1.06879 / 1.06889 / 1.06889)<br / translate="no">2017.03.30 22:12:30.271 Core 1 orden expiró [#4 límite de compra 0.01 EURUSD a 1.06789]

Me gustaría que fuera así:

2017.03.30 22:12:30.271 Core 1 2017.01.18 17:25:00 orden expirada [#4 límite de compra 0.01 EURUSD a 1.06789]

 
fxsaber:
sizeof-bug
Resultado

Un array local de 1 byte se ha convertido en un objeto array universal cuando se pasa como parámetro. El puntero del búfer del objeto se asocia en realidad a la matriz local, pero no puede redistribuirse.

La función f puede tomar cualquier matriz como entrada, incluyendo una matriz dinámica.

 
Slawa:

Un array local de 1 byte se ha convertido en un objeto array universal cuando se pasa como parámetro. Su puntero de búfer se asocia en realidad a la matriz local, pero no puede redistribuirse.

La función f puede introducir cualquier matriz, incluida la dinámica

Esta es una explicación muy interesante de la arquitectura interna. Pero debido a esto, sizeof produce un resultado bastante diferente al que se espera cuando se codifica.

Es decir, hay cierta incoherencia en la documentación y no queda claro cómo codificar sin comprobar cada vez.


Además, si se llama a sizeof después de la salida de la función, el tamaño se determina sin verse afectado por estos matices.

 

La opción de sincronización de posiciones sin aviso no funciona y la ejecución dentro de los spreads tampoco,
Se abre al peor precio y no se puede ajustar, y así en todos los terminales. Todos los puestos están abiertos.

¡Qué esperar cuando el proveedor cierra todas las operaciones plus!

 
fxsaber:

Esta es una explicación muy interesante de la arquitectura interna. Pero debido a esto sizeof produce una salida completamente diferente a la que se pretende cuando se codifica.

Es decir, hay cierta incoherencia en la documentación y no queda claro cómo codificar sin comprobaciones cada vez.


Además, si se llama a sizeof después de salir de una función, el tamaño se determina sin verse afectado por estos matices.

¿Has leído atentamente la documentación sobre sizeof?

La operación de tomar el tamaño de un tipo de datos o el tamaño de un objeto de cualquier tipo de datos ( sizeof )

Con la ayuda de laoperación sizeof es posible determinar el tamaño de la memoria que corresponde a un identificador o a un tipo. La operación sizeof tiene el siguiente formato:

Ejemplo:

sizeof(expresión).

Cualquier identificador o un nombre de tipo encerrado entre paréntesis puede utilizarse como expresión. Tenga en cuenta que no se puede utilizar un nombre de tipo void, y que un identificador no puede referirse a un campo de bits ni ser un nombre de función.

Si se especifica el nombre de un array estático como expresión (es decir, se especifica la primera dimensionalidad), el resultado es el tamaño de todo el array (es decir, el producto del número de elementos por la longitud del tipo). Si se especifica el nombre de un array dinámico como expresión (no se especifica la primera dimensionalidad), el resultado es el tamaño del objeto array dinámico.

Cuando se aplica sizeof a un nombre de tipo de estructura o clase o a un identificador que tiene un tipo de estructura o clase, el resultado es el tamaño real de la estructura o clase.

PS hay formas más directas de averiguar el tamaño de un array

 
Slawa:

Si se especifica el nombre de un array estático como expresión (es decir, se especifica la primera dimensión), el resultado es el tamaño de todo el array (es decir, el producto del número de elementos por la longitud del tipo).

He dejado fuera de la cita sólo el trozo que hace referencia al código anterior. Es un array estático allí, y el producto de dos números que mencionas debería ser igual a uno.

Si después de pasar el array de estático se convierte en dinámico y al devolverlo se vuelve a convertir en estático, ¿cómo se pasa el array en forma estática entonces?

PS hay formas más directas de averiguar el tamaño de la matriz

sizeof es bueno por su universalidad - aplicable también a tipos y arrays comunes. Y ArraySize es aplicable sólo a los arrays.
 
fxsaber:

De la cita, sólo he dejado el trozo que hace referencia al código anterior. Es un array estático, y el producto de dos números que mencionas debería ser uno.


Una vez más. Donde hay una matriz estática, muestra una.

Los parámetros de la función nunca fueron matrices estáticas. Hay un objeto de una matriz desconocida de antemano. Tampón dinámico, estático, de series temporales, de indicadores

¿Cómo le ayuda la "universalidad de sizeof"? Esto no es C o C++ con acceso directo a la memoria. Y hay que tener cuidado al interpretar los resultados del tamaño. Asigna un array dinámico de 1000 elementos y pide sizeof. Estoy hablando específicamente de C++ - parece que te sorprende el resultado

¿Y no has oído nada sobre _countof?

 
Slawa:

Una vez más. Donde hay una matriz estática, muestra una.

Los parámetros de la función nunca han sido matrices estáticas. Hay un objeto de una matriz desconocida de antemano. Tampón dinámico, estático, de series temporales, de indicadores.

¿Cómo le ayuda la "universalidad de sizeof"? Esto no es C o C++ con acceso directo a la memoria. Y hay que tener cuidado al interpretar los resultados del tamaño. Asigna un array dinámico de 1000 elementos y pide sizeof. Estoy hablando específicamente de C++ - parece que te sorprende el resultado

¿Y no has oído nada sobre _countof?

Sólo conozco un poco de MQL. No conozco a SI, por eso no me he enterado.

void OnStart( void )
{
  uchar Bytes[];
  
  ArrayResize(Bytes, 100);
  
  Print(sizeof(Bytes));
}

El resultado es 52. ¿Está bien? No tengo ninguna queja sobre la arquitectura interna. Sólo quiero asegurarme de que mis percepciones al codificar no son erróneas. Las nociones se forman sobre la base de una lectura cuidadosa de la documentación y los guiones de prueba en busca de ambigüedades.


En este caso me he encontrado con un comportamiento extraño en un código grande. Y después de una larga investigación encontré un matiz descrito por usted, que probablemente no sea obvio para nadie en este foro. Y con el ejemplo anterior resulta que no se puede hacer sizeof para arrays dinámicos en absoluto (el resultado es siempre 52).

Razón de la queja: