错误、漏洞、问题 - 页 265

 
Voodoo_King:

不要让我向服务台写更多的细节。这种情况可以而且应该在构建发布之前就被发现。你在主要区域有一个又一个的刺穿点。

年轻人,如果你知道这里的人踩到了什么耙子......

第二,开发商在现实生活中不卖。


因此,擦擦口水,写一个应用程序(在应用程序中你可以骂开发人员太坏)。

但必须要做一些事情。

 
谢谢你,我们会研究的。
 

我想问一下(由于某种原因我以前没有遇到过这个问题)...

这种结构是否完全由程序员决定(无符号数溢出时的循环)?

   uchar LastBarInd = 2;
   for (uchar i = LastBarInd; i >= 0; i--)
     {
      ................. // тело
     }

还是可以在编译器中修复?

 
AlexSTAL:

我想问一下(由于某种原因我以前没有遇到过这个问题)...

这种结构是否完全落在程序员身上(无符号数溢出时的循环)?

还是可以在编译器中进行调整?


这完全落在了程序员身上。

在编译器中最多只能做一个警告。

 
stringo:

这完全由程序员决定。

在编译器中最多只能做一个警告。

好吧,一个警告也无妨,请你这么做。
 
AlexSTAL:
好吧,一个警告也无妨,请你这么做。

作出的

void OnStart()
  {
   uchar LastBarInd;
   Print(LastBarInd>=0);
   Print(LastBarInd<0);
  }

// expression is always true    1.mq5   4       20
// expression is always false   1.mq5   5       20
 
mql5:

作出的

对不起...我不明白...

LastBarInd与循环中的无符号数从0减去1有什么关系?

Uchar  i >= 0; i--
 
AlexSTAL:

对不起...我不明白...

LastBarInd与循环中的无符号数从0减去1有什么关系?


你想让编译器事先计算出i 变量可能采取的所有数值,并给你一个警告?

SZZ 编译器已经有很多工作要做,所以它必须注意程序员的失误。

在运行时可能会出现错误。

 
AlexSTAL:

对不起...我不明白...

LastBarInd与循环中的无符号数从0减去1有什么关系?


循环的问题不在于它的变化方式(当然,除非它被改变为零),而在于检查该变量的值,它永远不会小于零。

void OnStart()
  {
   uchar v;
   Print(v>=0);
   Print(v<0);
  }
 
Urain:

你想让编译器事先计算出i 变量可以取的值,并给你一个警告吗?

SZZ 编译器已经有很多工作要做,所以它必须注意程序员的失误。

ZS 该错误可能会发生,但在运行时。

不...我指的是一种特殊情况,当。

1) 变量i的类型为无符号。

2) 一个明确的常数

i >= 0

3)减法

i--