错误、漏洞、问题 - 页 2502

 
fxsaber:

还不能完全搞清楚。

不是从字段的顺序,而是从pack()的 最大值和设定值加上取决于字段的顺序

现在,我做了以下变体

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

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

它不是像pack() 中指定的那样对准16,而是对准8的最大双数

 
Alexey Viktorov:

另外,这取决于字段的顺序。

经检查,这确实取决于。

struct A pack(16)
{
  double  x;
  short   j;
  int     b;
};
//+------------------------------------------------------------------+
void OnStart()
  {
   Print(sizeof(A)); // 16
  }
//+------------------------------------------------------------------+
你的例子给出了sizeof(A) = 24
 
fxsaber:

所以这就是这次讨论的开始。 事实证明,根本就不是这样的。

是的,我在描述对齐算法时犯了一个错误,因此可能造成了更大的混乱。

所以。

pack是一种与外部dll的兼容机制。 特别是,它类似于c++的#pragma pack,因此应该以同样的方式工作。

更多带尺寸的例子(用于第4包)。

char -> 1

短->2

int -> 4

长 -> 8

char, short -> 4

char, int -> 8

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

短,字符 -> 4

long, char -> 12

long, char, short -> 12

long, char, char, char -> 12

long, char, int -> 16

long, char, int, char -> 20

studio(可能还有其他地方)默认为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:

猫咪踩着键盘为你做交易了吗?

自己动手吧--这并不难。

我不知道该怎么做。我找不到这样的脚本。