Ошибки, баги, вопросы - страница 2502

 
fxsaber:

Пока не смог до конца понять.

Не от порядка полей, а от максимального и заданного значения pack() плюс зависит от последовательности полей.

Вот сейчас сделал ещё такой вариант

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

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

получилось выравнивание не до 16 как указано в pack(), а до 8 по максимальному double.

 
Alexey Viktorov:

плюс зависит от последовательности полей. 

проверил, действительно зависит:

struct A pack(16)
{
  double  x;
  short   j;
  int     b;
};
//+------------------------------------------------------------------+
void OnStart()
  {
   Print(sizeof(A)); // 16
  }
//+------------------------------------------------------------------+
Ваш пример выдал  sizeof(A) = 24
 
fxsaber:

Так с этого и началось данное обсуждение. Оказалось, что все совсем не так.

Да, я ошибся в описании алгоритма выравнивания и тем самым возможно внес еще больше сумятицы.

Итак

pack это механизм совместимости с внешними длл. в частности аналог с++ #pragma pack. и поэтому работать должен тоже аналогично.

дальше примеры с размерами (для pack 4)

char -> 1

short -> 2

int -> 4

long -> 8

char, short -> 4

char, int -> 8

char, long -> 12 (16 для 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

по умолчанию у студии (да и везде наверное) стоит pack(8)
 
TheXpert:

Спасибо, понял.

 
Alexey Viktorov:

На мой взгляд всё работает. Поскольку в вашем примере только один тип в структуре, то и выравнивать нет смысла.

Ошибаетесь, раотает неправильно. Смысл есть. Это баг. https://www.mql5.com/ru/forum/1111/page2498#comment_12349659

 

Здравствуйте. Подскажите, пожалуйста, в MT5 есть горячие клавиши для торговли? Я не нашел в инструкции. Если нет, то есть возможность это реализовать? Т.е. я нажал клавишу и открылся ордер, есть что-то подобное?

 
Vict:

Ошибаетесь, раотает неправильно. Смысл есть. Это баг. https://www.mql5.com/ru/forum/1111/page2498#comment_12349659

Ну какой-же баг?

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

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

вы объявляете массив мз двух элементов по два байта и получаете как и должно бвть 4 байта. Где баг? В чём?

А вот это

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

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

выравнивается по 4 и 2 элемента будут занимать 2*8 байт.

 
astronom55:

Здравствуйте. Подскажите, пожалуйста, в MT5 есть горячие клавиши для торговли? Я не нашел в инструкции. Если нет, то есть возможность это реализовать? Т.е. я нажал клавишу и открылся ордер, есть что-то подобное?

Наступил кот на клавиатуру и наторговал за вас?

Сделайте сами - это не сложно.

 
astronom55:

Здравствуйте. Подскажите, пожалуйста, в MT5 есть горячие клавиши для торговли? Я не нашел в инструкции. Если нет, то есть возможность это реализовать? Т.е. я нажал клавишу и открылся ордер, есть что-то подобное?

Справка терминала: Горячие клавиши - Для продвинутых пользователей - Начало работы


Если нужно действие: "прям один раз нажал и открыли позицию" - тогда необходимо в терминале назначить сочетание клавиш для скрипта или советника (скрипт или советник необходимо или скачать или написать или заказать).

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

Наступил кот на клавиатуру и наторговал за вас?

Сделайте сами - это не сложно.

Я не представляю как это сделать. Скрипт такой не нашел.
Причина обращения: