エラー、バグ、質問 - ページ 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と、ループ内の符号なし数値のゼロからの引き算とはどういう関係があるのでしょうか?

Uchar  i >= 0; i--
 
AlexSTAL:

すみません...理解できない...

LastBarIndと、ループ内の符号なし数値のゼロから1を引くこととは、どのような関係があるのでしょうか?


そして、コンパイラにi 変数が取りうるすべての値を事前に計算させ、警告を出させたいのですか?

SZZ コンパイラはすでに多くの仕事を抱えているので、プログラマーの不手際に目を光らせていなければならないのです。

おそらく、実行時にエラーが発生するでしょう。

 
AlexSTAL:

すみません...理解できない...

LastBarIndと、ループ内の符号なし数値のゼロから1を引くこととは、どのような関係があるのでしょうか?


ループの問題は、その変更方法ではなく(もちろんゼロに変更されない限り)、その変数の値をチェックすることであり、それは決してゼロより小さくなることはないのです。

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

コンパイラに、i 変数が取りうる値を事前に計算させて、警告を出させたいのでしょうか?

SZZ コンパイラはすでに多くの仕事を抱えているので、プログラマーの不手際に目を光らせていなければならないのです。

ZS おそらくエラーは発生しますが、実行時になります。

いや...時の特殊なケースという意味です。

1) 変数iの型はunsignedです。

2) 明示的な定数

i >= 0

3)減算

i--