エラー、バグ、質問 - ページ 2116 1...210921102111211221132114211521162117211821192120212121222123...3185 新しいコメント A100 2018.02.01 13:20 #21151 関数の引数が 右から左へ計算されない int i = 0; int _etLastError() { return i; } int _tringGetCharacter( string, int ) { i = 5041; return 0; } void OnStart() { string abc = "ABC"; ResetLastError(); Print( ::StringGetCharacter( abc, 1024 ), ":", GetLastError()); //(*)слева направо Print( _tringGetCharacter( abc, 1024 ), ":", _etLastError()); // справа налево } 文字列の結果 (*) : 0:5041 いずれの場合も期待される0:0 Koldun Zloy 2018.02.01 16:07 #21152 A100:関数の引数が 右から左へ計算されない 文字列の結果 (*) : 0:5041 どちらも想定内でした。0:0これはエラーではありません。コンパイラは、どの順番で引数を計算するかを自ら決定する。 それを考慮すればいいんです。 A100 2018.02.01 16:42 #21153 Koldun Zloy:これはエラーではありません。どの順番で引数を計算するかは、コンパイラが自ら決定する。このエラーは次のようなものです。最近まで、https://www.mql5.com/ru/forum/1111/page2040#comment_5858419(日付とドキュメントからの抜粋に注意してください:保証されて います)により、順序が厳密に定義されていました。その後、順番は静かに変更され(ドキュメントを含めて)、文明的な方法で変更できるようになりました - インラインhttps://www.mql5.com/ru/forum/1111/page2042#comment_5860752 を介して。 しかし、ユーザーはどのようにそれを知るべきでしょうか?ユーザーはそれを推測すべきなのでしょうか?あるいは、何かツールを使う前に、ドキュメントに目を通すことでしょうか。 Ошибки, баги, вопросы 2017.10.04www.mql5.com Общее обсуждение: Ошибки, баги, вопросы A100 2018.02.01 20:56 #21154 コンパイルエラーなど #define MACRO( X ) #X void OnStart() { Print( MACRO( AC/DC )); //нормально Print( MACRO( AC\\DC )); //error: '\' - illegal escape sequence Print( MACRO( ABC\nDEF )); //error: '\' - illegal escape sequence Print( MACRO( 'ABC' )); //error: '' - single quote needed Print( MACRO( "ABC )); //error: '' - double quotes are needed Print( MACRO( "ABC" )); //Результат: ABC вместо "ABC" Print( MACRO( '"'ABC )); //нормально } Koldun Zloy 2018.02.02 04:27 #21155 A100:間違いはこれです。最近まで、https://www.mql5.com/ru/forum/1111/page2040#comment_5858419(日付とドキュメントからの抜粋に注意:保証されて います)により、順序が厳密に定義されていたのです。その後、(ドキュメントを含めて)静かに順序が変更され、インラインhttps://www.mql5.com/ru/forum/1111/page2042#comment_5860752 を介して、文明的な方法で変更することが可能になりました。しかし、ユーザーはどのようにそれを知るべきでしょうか?ユーザーはそれを推測すべきなのでしょうか?あるいは、ツールを使用する前にドキュメントに目を通す?引数の計算順序に依存するようなコードを書かなければいいだけです。 C++では、たとえinlineキーワードがなくても、コンパイラは関数をインライン化する権利があります。 MQLではインラインキーワードはなく、コンパイラが任意に関数を挿入します。 右から左へ計算する順番は、この順番で引数をスタックに載せるためだったようだ。 が、レジスタを通過することもある。 また、組み込み関数では、そのような引数の受け渡しは全くありません。 A100 2018.02.02 07:14 #21156 Koldun Zloy:1.引数の計算順序に依存するようなコードを書かなければいいだけです。 2.C++では、inlineキーワードがなくても、コンパイラは関数をインライン化する権利を持っています。 3.MQLではインラインキーワードはなく、コンパイラが任意に関数を埋め込むだけです。 4.右から左へという計算順序は、引数がこの順序でスタックに置かれることと関係があるようだ。 が、レジスタを経由して渡すこともできます。 5.また、組み込み関数には引数の受け渡しが一切ありません。1.ドキュメントで逆順が保証されており、今回のコードの方がシンプルでわかりやすいのに、なぜそうしてはいけないのでしょうか?5 + (2*3)操作の優先順位を 使うことを否定し、どこにでも括弧(5 + (2*3))をつけるよう要求したほうがいいかもしれない。- 急遽、変更になった場合2.C++コンパイラは埋め込み関数に一定の要件を課しており、そのような状況を排除しています。https://www.mql5.com/ru/forum/1111/page2136#comment_6454818。 3.このように導入が提案されました。4.レジスタでは(スタックとは異なり)引数は逆順も含め、どのような順番でも置くことができる5.重要なのは渡す順番ではなく、引数を計算する順番であり、これは複数の引数を持つどのような関数でも同じです。そして、C++は関数をインライン化する(しない)前にそれを考慮します(項目2参照)。 Ошибки, баги, вопросы 2018.01.31www.mql5.com Общее обсуждение: Ошибки, баги, вопросы Koldun Zloy 2018.02.02 07:56 #21157 A100:1.ドキュメントで逆順が保証され、コードがよりシンプルで明確になるのであれば、なぜそうしないのでしょう。5 + (2*3)の 使用を否定し、どこにでも(5 + (2*3))の括弧を付けるよう要求した方がいいかもしれない。- 急遽、変更になった場合2.C++コンパイラは埋め込み関数に一定の要件を課しており、そのような状況を排除しています。https://www.mql5.com/ru/forum/1111/page2136#comment_6454818。 3.このように導入が提案されました。4.レジスタでは(スタックとは異なり)引数は逆順も含め、どのような順番でも置くことができる5.重要なのは渡す順番ではなく、引数を計算する順番であり、これは引数が2つ以上ある関数の順番です。そして、C++は関数をインライン化する(しない)前にそれを考慮します(ポイント2参照)。3.それで何が得られるのかわからない。コンパイラがinlineを明示的に指定せずに関数を埋め込むことを禁止したいのでしょうか?2.意味がわからないんですけど。 4.私は、あの注文とそのキャンセルが何に関係しているのかを示唆しただけです。たまたまそうなったのではなく、これから先もずっとそうなのだと思います。恐ろしいことは何もない。 5.あなたは勘違いしています。C++では、引数の計算順序は定義されていない。 1.私は長年C++で書いていますが、これが問題だと思ったことはありません。 A100 2018.02.02 08:48 #21158 Koldun Zloy:3.これで何ができるのかわからない。コンパイラがinlineを明示的に指定せずに関数を埋め込むのを防ぎたいのでしょうか? 4.私は、この注文とそのキャンセルがどのような関係にあるのかを示唆したに過ぎません。たまたまそうなったのではなく、今もずっとそうなのだと思います。ひどいことはないんですよ。 5.あなたは勘違いしています。C++では、引数の計算順序は未定義である。 3.インラインのない関数の引数の計算順序をコンパイラが変更することは許されないと言いたかったのです。 5.計算の順番は実装(コンパイラ)によって定義され、かなり具体的(右から左か、左から右か)であり、例えばここです。 void OnStart() { ResetLastError(); Print( GetLastError(), ":", StringGetCharacter( "abc", 1024 ), ":", GetLastError()); } 2-1-3なのか2-3-1なのか、どの順番なのかがはっきりしない。 結果:5041:0:5041。 期待値:左から0:0:5041または 5041:0:0 右から左へ fxsaber 2018.02.02 09:02 #21159 A100:2-1-3なのか2-3-1なのか、どの順番なのかが不明です。明らかに曖昧なコードを書く理由がわからないのですが? A100 2018.02.02 09:08 #21160 fxsaber:明らかに曖昧なコードを書く理由がわからないのですが?同様の質問をあなたにもhttps://www.mql5.com/ru/forum/1111/page2037#comment_5842347 Ошибки, баги, вопросы 2017.10.02www.mql5.com Общее обсуждение: Ошибки, баги, вопросы 1...210921102111211221132114211521162117211821192120212121222123...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
関数の引数が 右から左へ計算されない
文字列の結果 (*) : 0:5041
いずれの場合も期待される0:0
関数の引数が 右から左へ計算されない
文字列の結果 (*) : 0:5041
どちらも想定内でした。0:0
これはエラーではありません。コンパイラは、どの順番で引数を計算するかを自ら決定する。
それを考慮すればいいんです。
これはエラーではありません。どの順番で引数を計算するかは、コンパイラが自ら決定する。
このエラーは次のようなものです。最近まで、https://www.mql5.com/ru/forum/1111/page2040#comment_5858419(日付とドキュメントからの抜粋に注意してください:保証されて います)により、順序が厳密に定義されていました。その後、順番は静かに変更され(ドキュメントを含めて)、文明的な方法で変更できるようになりました - インラインhttps://www.mql5.com/ru/forum/1111/page2042#comment_5860752 を介して。 しかし、ユーザーはどのようにそれを知るべきでしょうか?ユーザーはそれを推測すべきなのでしょうか?あるいは、何かツールを使う前に、ドキュメントに目を通すことでしょうか。
コンパイルエラーなど
間違いはこれです。最近まで、https://www.mql5.com/ru/forum/1111/page2040#comment_5858419(日付とドキュメントからの抜粋に注意:保証されて います)により、順序が厳密に定義されていたのです。その後、(ドキュメントを含めて)静かに順序が変更され、インラインhttps://www.mql5.com/ru/forum/1111/page2042#comment_5860752 を介して、文明的な方法で変更することが可能になりました。しかし、ユーザーはどのようにそれを知るべきでしょうか?ユーザーはそれを推測すべきなのでしょうか?あるいは、ツールを使用する前にドキュメントに目を通す?
引数の計算順序に依存するようなコードを書かなければいいだけです。
C++では、たとえinlineキーワードがなくても、コンパイラは関数をインライン化する権利があります。
MQLではインラインキーワードはなく、コンパイラが任意に関数を挿入します。
右から左へ計算する順番は、この順番で引数をスタックに載せるためだったようだ。
が、レジスタを通過することもある。
また、組み込み関数では、そのような引数の受け渡しは全くありません。
1.引数の計算順序に依存するようなコードを書かなければいいだけです。
2.C++では、inlineキーワードがなくても、コンパイラは関数をインライン化する権利を持っています。
3.MQLではインラインキーワードはなく、コンパイラが任意に関数を埋め込むだけです。
4.右から左へという計算順序は、引数がこの順序でスタックに置かれることと関係があるようだ。
が、レジスタを経由して渡すこともできます。
5.また、組み込み関数には引数の受け渡しが一切ありません。
1.ドキュメントで逆順が保証されており、今回のコードの方がシンプルでわかりやすいのに、なぜそうしてはいけないのでしょうか?5 + (2*3)操作の優先順位を 使うことを否定し、どこにでも括弧(5 + (2*3))をつけるよう要求したほうがいいかもしれない。- 急遽、変更になった場合
2.C++コンパイラは埋め込み関数に一定の要件を課しており、そのような状況を排除しています。https://www.mql5.com/ru/forum/1111/page2136#comment_6454818。
3.このように導入が提案されました。
4.レジスタでは(スタックとは異なり)引数は逆順も含め、どのような順番でも置くことができる
5.重要なのは渡す順番ではなく、引数を計算する順番であり、これは複数の引数を持つどのような関数でも同じです。そして、C++は関数をインライン化する(しない)前にそれを考慮します(項目2参照)。
1.ドキュメントで逆順が保証され、コードがよりシンプルで明確になるのであれば、なぜそうしないのでしょう。5 + (2*3)の 使用を否定し、どこにでも(5 + (2*3))の括弧を付けるよう要求した方がいいかもしれない。- 急遽、変更になった場合
2.C++コンパイラは埋め込み関数に一定の要件を課しており、そのような状況を排除しています。https://www.mql5.com/ru/forum/1111/page2136#comment_6454818。
3.このように導入が提案されました。
4.レジスタでは(スタックとは異なり)引数は逆順も含め、どのような順番でも置くことができる
5.重要なのは渡す順番ではなく、引数を計算する順番であり、これは引数が2つ以上ある関数の順番です。そして、C++は関数をインライン化する(しない)前にそれを考慮します(ポイント2参照)。
3.それで何が得られるのかわからない。コンパイラがinlineを明示的に指定せずに関数を埋め込むことを禁止したいのでしょうか?
2.意味がわからないんですけど。
4.私は、あの注文とそのキャンセルが何に関係しているのかを示唆しただけです。たまたまそうなったのではなく、これから先もずっとそうなのだと思います。恐ろしいことは何もない。
5.あなたは勘違いしています。C++では、引数の計算順序は定義されていない。
1.私は長年C++で書いていますが、これが問題だと思ったことはありません。
3.これで何ができるのかわからない。コンパイラがinlineを明示的に指定せずに関数を埋め込むのを防ぎたいのでしょうか?
4.私は、この注文とそのキャンセルがどのような関係にあるのかを示唆したに過ぎません。たまたまそうなったのではなく、今もずっとそうなのだと思います。ひどいことはないんですよ。
5.あなたは勘違いしています。C++では、引数の計算順序は未定義である。
3.インラインのない関数の引数の計算順序をコンパイラが変更することは許されないと言いたかったのです。
5.計算の順番は実装(コンパイラ)によって定義され、かなり具体的(右から左か、左から右か)であり、例えばここです。
2-1-3なのか2-3-1なのか、どの順番なのかがはっきりしない。
結果:5041:0:5041。
期待値:左から0:0:5041または
5041:0:0 右から左へ
2-1-3なのか2-3-1なのか、どの順番なのかが不明です。
明らかに曖昧なコードを書く理由がわからないのですが?
明らかに曖昧なコードを書く理由がわからないのですが?
同様の質問をあなたにもhttps://www.mql5.com/ru/forum/1111/page2037#comment_5842347