错误、漏洞、问题 - 页 2047

 
Alexey Navoykov:

我不明白你想要什么。我说我在谈论 "变量初始化"。而在这种情况下,静态变量和全局变量的行为是相同的。我甚至给了你一个文档的链接:变量初始化

请注意,静态变量和全局变量在那里到处都是连在一起的。

而且,我们不批评初始化序列,因为它与手头的问题没有关系。让我提醒你,问题在于编译器不会在它应该产生错误的地方产生错误。如果一个静态变量仍未被初始化,你就不能访问它。

好吧,改变全局变量的名称,如果它让你那么困扰的话。它不会以任何方式影响结果。

你好,我们来了......你自己看了这个链接吗?

除了mql,我还知道,不是很清楚,只有VBA,而且只有在那里我遇到了要求初始化变量的指令。注意,这完全由程序员决定。你想让MQ强制初始化绝对所有的变量?并在这类用户的每项要求上改变初始化顺序?你有机会偏离规则,了解你所做的事情,而你要求排除这样的机会?

看来你只是在寻找可以挑剔和玷污mql语言的东西。从类中的一个变量中删除静态,你就会很高兴。

 

当我们从GetTickCount()得到的系统变量溢出时会发生什么?

终端有什么标准反应吗?

是否有必要以程序化的方式监测这一时刻,并实施应对措施?

 
Alexey Viktorov:

你好,我们来了......你自己看了这个链接吗?

除了mql之外,我还知道,也不是很清楚,只有VBA,而且只有在那里我遇到了强制性的变量初始化的指令。请注意,这完全由程序员决定。你想让MQ强制初始化绝对所有的变量?

这就是原因所在。你不仅不太了解(你自己也说过多少次了),你还知道VBA,这和这种语言没有什么关系。我对C++相当了解。这是一种非常明确和严格的语言,那里不允许有自由意志,你在幻想。而MQL是按照C++的形象和模样创造的。因此,让我们停止它。先熟悉一下C++,然后就会有意识地去争论一些东西了。

p.s.顺便说一下,我现在才意识到,你原来把对话带入了错误的方向,因为我已经忘记了这一切的开始,现在我又看到了我的原始代码,意识到你在这里 的第一次攻击是完全离题的。而我怎么能不马上注意呢!?在我的代码中,静态变量被完全 初始化为常量,正如文档中描述的那样。所以问题是它还没有初始化狗屎。而你开始告诉我,这是因为它必须用常数来初始化。在这里,我们开始...

 

为什么我不能用变量来初始化数组

void (double a, double b,double c )

{

double inp[3]={a,b,c};   // компилятор ругается 'а' - constant expression required      

}

 
Alexey Kochetkov:

为什么我不能用变量来初始化数组

因为在MQL中,你只能用常数进行初始化。
 
Alexey Navoykov:

嗯,原因就在这里。你不仅不太了解(你自己也说过多少次了),而且你还知道VBA,这与有关的语言没有什么关系。我对C++相当了解。这是一种非常明确和严格的语言,那里不允许有自由意志,你在幻想。而MQL是按照C++的形象和模样创造的。因此,让我们停止它。先熟悉一下C++,然后就会有意识地去争论一些东西了。

p.s.顺便说一下,我现在才意识到,你原来把对话带入了错误的方向,因为我已经忘记了这一切的开始,现在我又看到了我的原始代码,意识到你在这里 的第一次攻击是完全离题的。而我怎么能不马上注意呢!?在我的代码中,静态变量被完全 初始化为常量,正如文档中描述的那样。所以问题是它还没有初始化狗屎。而你开始告诉我,这是因为它必须用常数来初始化。就这样了...

我最后一次叫你研究初始化序列。在我看来,逻辑思考的能力比知识更重要。你可能对所有的编程语言了如指掌,但你需要了解初始化顺序

一个静态变量不能在全局变量之前被初始化。这也说明了一切。

 
ChartNavigate错误
const bool Init = ChartSetInteger(0, CHART_AUTOSCROLL, false) && EventSetTimer(1);  

void OnTimer()
{  
  Print("----------")  ;
  Print(ChartGetInteger(0, CHART_FIRST_VISIBLE_BAR));  

  ChartNavigate(0, CHART_BEGIN, 100);
  
  Print(ChartGetInteger(0, CHART_FIRST_VISIBLE_BAR));
}

ICMarkets-Demo EURCHF M1的结果(最大条数=5000)。

2017.10.18 21:16:00.800 ----------
2017.10.18 21:16:00.800 4899
2017.10.18 21:16:00.801 199930
2017.10.18 21:16:01.821 ----------
2017.10.18 21:16:01.821 199930
2017.10.18 21:16:01.821 4899
2017.10.18 21:16:02.836 ----------
2017.10.18 21:16:02.836 4899
2017.10.18 21:16:02.836 199930
2017.10.18 21:16:03.845 ----------
2017.10.18 21:16:03.845 199930
2017.10.18 21:16:03.855 4899
2017.10.18 21:16:04.864 ----------
2017.10.18 21:16:04.864 4899
2017.10.18 21:16:04.864 199930
2017.10.18 21:16:05.876 ----------
2017.10.18 21:16:05.876 4999
2017.10.18 21:16:05.886 199930

我根本就不明白什么。它应该是相同的数字。但最后,图表一直在跳动。

它对任何人都有效吗?

 
Alexey Viktorov:

我最后一次敦促你熟悉初始化顺序。在我看来,逻辑思考的能力比知识更重要。你可能对所有的编程语言了如指掌,但你需要了解初始化顺序

一个静态变量不能在全局变量之前被初始化。这也说明了一切。

对不起,我不会再理会你毫无意义的挑衅,而且是用这样的语气。我已经很抱歉把时间浪费在与一个二流子的无意义争论上。首先,你提出的是与我的情况完全无关的常数,而且和现在一样具有侵略性的傲慢。现在你在做没有事实根据的声明,甚至不知道这个主题,也不了解编程语言是如何组织的。把你的 "逻辑思维"、猜想和幻想留给自己。我对他们不感兴趣。

 
Kirill Belousov:

当我们从GetTickCount()得到的系统变量溢出时会发生什么?

终端有什么标准反应吗?

是否有必要以编程方式跟踪这一时刻并实施反应?

没有必要实施任何反应。

如果你将GetTickCount的返回值收到一个uint类型的 变量中,你可以安全地得到差值

uint prev_count=GetTickCount();
...
...
uint diff=GetTickCount()-prev_count;

即使有溢出,你也会得到正确的差额。这些是对无符号整数进行操作的特殊性。但这只有在前一个值是以完全相同的方式(GetTickCount)获得的,并且前一个值的获得时间不早于49天时才行。

如果你检查的是多还是少,你需要更多的操作,而不是简单的减法

 
fxsaber:
ChartNavigate的错误

ICMarkets-Demo EURCHF M1的结果(最大条数=5000)。

我根本就不明白什么。它应该是相同的数字。但最后,图表一直在跳动。

它在繁衍吗?

为什么它是一个错误?

对图表进行导航并不是马上就能实现的。这是一个异步的命令。它的执行结果是不被保证的。

就像你按下了PageUp按钮,图表就静止了。突然,它抽搐起来。