错误、漏洞、问题 - 页 1837

 
fxsaber:
这是零。

是的,知道了。的确,怎么会有TRADE_TRANSACTION_DEAL_AD的订单...。

谢谢你。

 
虫子的大小(sizeof-bug
void f( uchar &Array[] )
{
  Print(sizeof(Array));
}

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

结果
1
52
 

在测试过程中,日志没有显示订单过期的时间。

2017.03.30 22:12:30.271 核心 1 2017.01.18 16:55:00 买入限额0.01 欧元兑美元在1.06789(1.06879/1.06889 / 1.06889)<br / translate="no">2017.03.30 22:12:30.271 Core 1订单过期 [#4买入限额0.01 EURUSD at 1.06789]

我希望它是这样的。

2017.03.30 22:12:30.271 核心 1 2017.01.18 17:25:00 订单过期 [#4 买入限额 0.01 EURUSD at 1.06789]

 
fxsaber:
虫子的大小(sizeof-bug
结果

当作为参数传递时,一个1字节的本地数组已经成为一个通用数组对象。对象缓冲区指针实际上与本地数组相关联,但它不能被重新分配。

f函数可以接受任何数组作为输入,包括一个动态数组。

 
Slawa:

当作为参数传递时,一个1字节的本地数组已经成为一个通用数组对象。它的缓冲区指针实际上与本地数组相关,但它不能被重新分配。

函数f可以输入任何数组,包括动态的

这是对内部架构的一个非常有趣的解释。但正因为如此,sizeof产生的结果与你编码时预期的完全不同。

也就是说,在文件中存在一些不一致的地方,而且每次都不检查就变得不清楚如何编码。


此外,如果sizeof在函数退出后被调用,那么尺寸的确定就不会受到这种细微差别的影响。

 

在没有警告的情况下同步仓位的选项不起作用,在价差内执行也不起作用。
它以最差的价格开盘,不能调整,所有终端都是如此。所有的职位都已开放。

当供应商关闭所有的加价交易时,要等什么呢!?

 
fxsaber:

这是对内部架构的一个非常有趣的解释。但由于这个原因,sizeof产生的输出与你编码时的意图完全不同。

也就是说,在文件中存在一些不一致的地方,而且每次都不检查就变得不清楚如何编码。


此外,如果你在退出一个函数后调用sizeof,那么大小的确定就不会受到这种细微差别的影响。

你有没有认真阅读关于sizeof的文档

取一个数据类型的大小或任何数据类型的对象的大小的操作( sizeof )

sizeof操作 的帮助下 ,可以确定与一个标识符或一个类型相对应的内存大小 sizeof操作的格式如下。

例子。

sizeof(expression)

任何标识符或括号内的类型名称都可以作为表达式使用。 请注意,不能使用空洞的类型名称,标识符不能指代位域或成为函数名称。

如果静态数组名称被指定为一个表达式(即指定了第一个维度),结果是整个数组的大小(即元素数与类型长度的乘积)。如果一个动态数组名称被指定为表达式(没有指定第一维),那么结果就是动态数组 对象的大小。

当sizeof被应用于一个结构或类的类型名称或具有结构或类类型的标识符时,结果是结构或类的实际大小。

PS有更直接的方法来找出一个数组的大小

 
Slawa:

如果静态数组名称被指定为一个表达式(即指定了第一个维度),那么结果就是整个数组的大小(即元素数与类型长度的乘积)。

我在引文中只漏掉了提到上述代码的那一段。那里是一个静态数组,你提到的两个数字的乘积应该等于1。

如果在传递数组后,从静态变成了动态,在返回时又变成了静态,那么你如何以静态形式传递数组?

PS有更直接的方法来找出阵列的大小

sizeof很好,因为它具有普遍性--也适用于普通类型和数组。而ArraySize只适用于数组。
 
fxsaber:

从这句话中,我只留下了提到上述代码的那一段。这是一个静态数组,你提到的两个数字的乘积应该是1。


再一次。凡是有静态数组的地方,它就显示一个。

函数参数从来都是静态数组。之前有一个未知数组的对象。动态、静态、时间序列、指标缓冲器

"sizeof的普遍性 "对你有什么帮助?这不是直接访问内存的C或C++。而且,在解释sizeof结果时,你必须谨慎。将一个动态数组分配给1000个元素,并要求提供sizeof。我具体谈论的是C++--你似乎对这个结果很惊讶

而你没有听说过关于_countof的事情吗?

 
Slawa:

再一次。凡是有静态数组的地方,它就显示一个。

函数参数从来都是静态数组。之前有一个未知数组的对象。动态、静态、时间序列、指标缓冲。

"sizeof的普遍性 "对你有什么帮助?这不是C或C++的直接内存访问。而且,在解释sizeof结果时,你必须谨慎。将一个动态数组分配给1000个元素,并要求提供sizeof。我具体谈论的是C++--你似乎对这个结果很惊讶

而你没有听说过关于_countof的事情吗?

我只知道一点MQL的情况。我不知道SI,这就是为什么我没有听说。

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

其结果是52。可以吗?我对内部架构没有任何抱怨。我只是想确保我在编码时的认知没有错误。概念是在仔细阅读文档和测试脚本的基础上形成的,以寻找模糊之处。


在这种情况下,我在一个大代码中遇到了一些奇怪的行为。而经过长时间的研究,我终于发现了你所描述的一个细微差别,这对这个论坛上的人来说几乎是不明显的。而在上面的例子中,你根本无法对动态数组 进行sizeof(结果总是52)。