Errores, fallos, preguntas - página 2502

 
fxsaber:

Todavía no lo he podido entender.

No por el orden de los campos, sino por el valor máximo y fijo de pack() más depende del orden de los campos.

Ahora he hecho la siguiente variante

struct A pack(16)
{
  short   j;
  double  x;
  int     b;
};

void OnStart()
{
  Print(sizeof(A)); // 24
}

No se alinea a 16 como se especifica en pack(), sino a 8 por el doble máximo.

 
Alexey Viktorov:

además depende de la secuencia de los campos.

comprobado, sí depende:

struct A pack(16)
{
  double  x;
  short   j;
  int     b;
};
//+------------------------------------------------------------------+
void OnStart()
  {
   Print(sizeof(A)); // 16
  }
//+------------------------------------------------------------------+
Su ejemplo diosizeof(A) = 24
 
fxsaber:

Así es como empezó esta discusión. Resulta que no es así en absoluto.

Sí, cometí un error al describir el algoritmo de alineación y, por lo tanto, puede haber causado aún más confusión.

Así que,

pack es un mecanismo de compatibilidad con las dlls externas. En particular, es análogo a c++ #pragma pack y por lo tanto debería funcionar de la misma manera.

otros ejemplos con dimensiones (para el paquete 4)

char -> 1

corto -> 2

int -> 4

largo -> 8

char, short -> 4

char, int -> 8

char, long -> 12 (16 para pack(8))

short, char -> 4

long, char -> 12

long, char, short -> 12

long, char, char, char -> 12

long, char, int -> 16

long, char, int, char -> 20

studio (y probablemente en todos los demás lugares) tiene como valor predeterminado pack(8)
 
TheXpert:

Gracias, ya veo.

 
Alexey Viktorov:

En mi opinión, todo funciona. Como en tu ejemplo sólo hay un tipo en la estructura, no tiene sentido la alineación.

Se equivoca, no funciona correctamente. Tiene sentido. Es un error. https://www.mql5.com/ru/forum/1111/page2498#comment_12349659

 

Hola. ¿Podríais decirme si hay teclas de acceso rápido para operar en MT5? No los he encontrado en el manual. Si no es así, ¿hay alguna forma de implementarlo? Es decir, he pulsado una tecla y se ha abierto una orden, ¿hay algo similar?

 
Vict:

No, no funciona bien. Tiene sentido. Es un error. https://www.mql5.com/ru/forum/1111/page2498#comment_12349659

Entonces, ¿cuál es el error?

struct A pack(4)
{
  short j;
};

void OnStart()
{
   A q[2];
   Print(sizeof(q)); // 4
   return;
}

Declaras un array de dos elementos con dos bytes cada uno y obtienes 4 bytes como debería ser. ¿Dónde está el bicho? ¿Qué?

Esto.

struct A pack(4)
{
  short j;
  int   b;
};

void OnStart()
{
   A q[2];
   Print(sizeof(q)); // 16
   return;
}

El array está alineado a 4 y 2 elementos ocuparán 2*8 bytes.

 
astronom55:

Hola. ¿Podríais decirme si hay teclas de acceso rápido para operar en MT5? No los he encontrado en el manual. Si no es así, ¿hay alguna forma de implementarlo? Es decir, he pulsado una tecla y se ha abierto una orden, ¿hay algo similar?

¿El gato pisó el teclado y cambió por ti?

Hágalo usted mismo: no es difícil.

 
astronom55:

Hola. ¿Podríais decirme si hay teclas de acceso rápido para operar en MT5? No los he encontrado en el manual. Si no es así, ¿hay alguna forma de implementarlo? Es decir, he pulsado una tecla y se ha abierto una orden, ¿hay algo similar?

Ayuda de la terminal:Teclas de acceso rápido - Usuarios avanzados - Primeros pasos


Si necesita realizar una acción "Sólo haga clic una vez y se abrirá una posición" - entonces una combinación de teclas debe ser asignada a un script o a un Asesor Experto en el terminal (el script o el Asesor Experto debe ser descargado, escrito u ordenado).

Горячие клавиши - Для продвинутых пользователей - MetaTrader 5
Горячие клавиши - Для продвинутых пользователей - MetaTrader 5
  • www.metatrader5.com
Горячие клавиши — это клавиши и их комбинации, которые позволяют быстро выполнять различные команды без обращения к меню и панелям управления. Существует возможность назначать горячие клавиши для вызова любого элемента окна "Навигатор", за исключением элементов группы "Счета". Чтобы назначить сочетание клавиш элементу, выполните команду...
 
Artyom Trishkin:

¿Ha pisado el gato el teclado y ha hecho un intercambio por ti?

Hazlo tú mismo, no es difícil.

No tengo ni idea de cómo hacerlo. No he podido encontrar un guión así.
Razón de la queja: