错误、漏洞、问题 - 页 2044

 
Alexey Navoykov:

静态变量初始化 的问题。这在旧的构建中是不存在的。

谁不介意把这个送到服务台。我再也不想和他们在那里交流了。

这不是一个bug,从这里 已经讨论过了。摘自

关于交易、自动交易系统和策略测试的论坛

mql4语言的特殊性,技巧和窍门

Alexey Viktorov, 2017.04.30 08:54

初始化序列。(对于那些不了解的人来说)

首先是全局变量,然后是静态 变量,根据函数的优先级排列,OnInit()、OnTick()或OnCalculate()。我对进一步不感兴趣,在我的时代,我对本地的不感兴趣。所以在这段代码中,事实证明,在静态变量被初始化 之前,函数就被调用了,因此出现了我们所说的错误。该函数在变量被初始化之前被调用

 
fxsaber:

这不是一个bug,从这里 已经讨论过了。摘自

所以,如果它是在你和Alexey Viktorov之间讨论的,那你就有理由相信这不是一个错误?)而且这个人自己说,他的编程知识水平比你低得多。也就是说,他可以从名单上划掉。你是唯一剩下的人)。与自己讨论过,所以这不是一个错误)。

这是一个错误。原则上不能这样,变量的初始化会被忽略,代码会跳过它而继续执行。这是无稽之谈。而初始化的顺序在这里并不重要。该变量要么被初始化,要么编译器在此产生错误。没有第三条路。否则它就不是一种编程语言,而是其他东西。

 

新版本中的另一个错误。

template<typename T>
int F1(const T& array[])
{
  return ArrayMaximum(array);
}


template<typename T>
int F2(const T& array[]) { return F1(array); }


void OnStart()
  {
    int arr[4]= { 1, 2, 3 };
    Print(F2(arr));  // Выдаёт -1 !!!
  }


诶,这太粗俗了。我想我应该升级到新的构建,因为旧的构建不接受市场中的产品。这里有一个虫子上的虫子!

 
Alexey Navoykov:

所以,如果这是你和Alexey Viktorov之间讨论过的,那你就有理由相信这不是一个错误?)而且这个人自己说,他的编程知识水平比你低得多。也就是说,他可以从名单上划掉。你是唯一剩下的人)。与自己讨论过,所以这不是一个错误)。

这是一个错误。原则上不能这样,变量的初始化会被忽略,代码会跳过它而继续执行。这是无稽之谈。而初始化的顺序在这里并不重要。该变量要么被初始化,要么编译器在此产生错误。没有第三条路。否则它就不是一种编程语言,而是其他东西。

你可以划掉它,我从来没有摊开手指 "我是什么样的程序员"...

而你的母亲没有告诉你要阅读文件吗?我特别为这种人插入了文档中的一段话。

有一个关于交易、自动交易系统和交易策略测试的论坛

mql4的特殊性,技巧和窍门

Alexey Viktorov, 2017.04.29 12:50

帮助中说静态变量......可以吗?自行阅读

静态变量可以用一个常数或 与其类型相对应的常数表达式 进行初始化,而 不像简单的局部变量可以用任何表达式进行初始化。


但不是一个函数。

这就是它的工作方式

#property strict
#property indicator_chart_window

int TestBrokenStatic()
{
   static int stInt = 101;
   stInt++;
   return stInt;
}

int OnInit()
{
   static int result = 0;
   result = TestBrokenStatic();
   Print("TestStatic Expected result 102   - Actual result=", result);
   result = TestBrokenStatic();
   Print("TestStatic Expected result 103   - Actual result=", result);
   
   return INIT_SUCCEEDED;
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   return rates_total;
}
2017.04.29 13:49:51.546 !Test USDCHF,M15: TestStatic Expected result 103   - Actual result=103
2017.04.29 13:49:48.457 !Test USDCHF,M15: TestStatic Expected result 102   - Actual result=102
2017.04.29 13:49:40.089 Custom indicator Test\!Test USDCHF,M15: loaded successfully

 
Alexey Navoykov:

新版本中的另一个错误。

诶,这里太简陋了。我想我应该升级到新的构建,因为旧的构建不接受市场中的产品。然后有一个虫子上的虫子!

而且我还说对了!

 
Alexey Viktorov:

你可以划掉它,我从来没有摊开手指 "我是什么样的程序员"...

而你的母亲没有告诉你要阅读文件吗?特别是对于这些人,我插入了文档中的一段话

我明白了,那么我道歉,我没有马上注意到它。当然,令人惊讶的是,他们如何设法在没有人注意的情况下改变它。我不明白的是,为什么编译器对正在执行的无效操作没有反应。也就是说,在任何情况下都有一个错误。
 
fxsaber:

我猜对了!


嗯,你是什么构造?我的是1653年。

 
Alexey Navoykov:

所以,如果这是你和Alexey Viktorov之间讨论过的,那你就有理由相信这不是一个错误?)而且这个人自己说,他的编程知识水平比你低得多。也就是说,他可以从名单上划掉。你是唯一剩下的人)。与自己讨论过,所以这不是一个错误)。

这是一个错误。原则上不能这样,变量的初始化会被忽略,代码会跳过它而继续执行。这是无稽之谈。而初始化的顺序在这里并不重要。该变量要么被初始化,要么编译器在此产生错误。没有第三条路。否则它就不是一种编程语言,而是其他东西。

如果我找到了对结果的合理(一致)解释,我就不认为这是一个错误。我认为,如果结果与C++不一致,就不能接受证明一个错误。是C++中有人这样想,也这样做。但他们可能没有这样想,因此没有这样做。这就是为什么最好不要参考外面的东西,而是依靠你自己内在的概念,即必须是什么。而这个 "自己的 "应该是真正属于自己的,这才是可取的。而不是在你获得编程经验的过程中不可察觉地强加给你 "应该是这样 "的定型观念的结果。

我并不介意做错事。我在自己的耙子上慢慢学习。

 
Alexey Navoykov:

嗯,你是什么构造?我有1653个。

1653x64.

 
fxsaber:

1653x64.

奇怪的是,怎么会有这样的差异呢?


让别人和自己一起检查。