if(FileReadStruct(handle,temp_rate)!=60)
{
IsError=true;
Print(__FUNCSIG__," Не удалось прочитать данные из файла по причине ошибки ",GetLastError());
return;
}
#define CHECK_READ(dHndl,dRate,dRet) do \
if(FileReadStruct(dHndl,dRate)!=60){ \
IsError=true; \
Print(__FUNCSIG__," Не удалось прочитать данные из файла по причине ошибки ",GetLastError()); \
return dRet;} while(false)
...
CHECK_READ(handle,temp_rate,);
...
CHECK_READ(handle,temp_rate,0);
...
Vladimir Simakov: if (condition) CHECK_READ(h,r,0); else CHECK_READ(h,r,1);
do-whileラッパーを使用しないマクロをデプロイして、何が起こるか見てみましょう))
if (condition) if(FileReadStruct(h,r)!=60){
IsError=true;
Print(__FUNCSIG__," Не удалось прочитать данные из файла по причине ошибки ",GetLastError());
return 0;}; else if(FileReadStruct(dHndl,dRate)!=60){
IsError=true;
Print(__FUNCSIG__," Не удалось прочитать данные из файла по причине ошибки ",GetLastError());
return dRet;};
=
if (condition)
if(FileReadStruct(h,r)!=60)
{
IsError=true;
Print(__FUNCSIG__," Не удалось прочитать данные из файла по причине ошибки ",GetLastError());
return 0;
};
else
if(FileReadStruct(dHndl,dRate)!=60)
{
IsError=true;
Print(__FUNCSIG__," Не удалось прочитать данные из файла по причине ошибки ",GetLastError());
return dRet;
};
mt4とmt5のどちらで使うのですか? ここに置いたコードは削除しました。
MQL4
MQL4
私はあなたに助言する - 見つけるために多くの良いことがありますhttps://www.mql5.com/ru/forum/131859/page6#comment_3359705
より具体的で興味深い質問かもしれません。
同じ構成要素を別の機能で使っている
ただし、関数にはvoid型の ものと、値を返すものがあるので、それらからは0を返しています。
その都度、正しいものに置き換えてくれる魔法のマクロを作れないか?
より具体的で興味深い質問かもしれません。
同じ構成要素を別の機能で使っている
ただし、関数にはvoid型の ものと、値を返すものがあるので、それらからは0を返しています。
このような魔法のマクロを作れば、それぞれのケースで必要なバリアントを代用してくれるのでしょうか?
マクロでreturnを使うのは、自分の脚に銃口を向けるようなもので、ifと組み合わせると、大砲になる)))でも、本当にそうしたいのなら
テストはしていませんが、うまくいくはずです。また、銃をピストルに戻した)))
ありがとうございました。
そこで、最後のパラメータにreturnの値か、空白を渡すと、次のようになる。
return ;とスペースは何の意味もありません。もちろん、お気に入りのブラケットなしでも使えることを、どうして忘れていたのでしょう。
ところで、この構成がループの中にあって、一度しか実行できないのはなぜか、教えてください。銃が、銃に戻ったのでしょうか?無限再帰のような状況も考えられるのでしょうか?
ありがとうございました。
そこで、最後のパラメータにreturnの値か、空白を渡すと、次のようになる。
とスペースは何の意味もありません。もちろん、私の大好きなブラケットなしでも使えることを、どうして忘れていたのでしょう。
同じ意味で、なぜこの構成が一度しか実行できないループの中に詰め込まれているのか、教えてください。銃が銃に戻ったのでしょうか?無限再帰とかそういう状況が考えられる?
if (condition) CHECK_READ(h,r,0); else CHECK_READ(h,r,1);
=
代用品の原理を正しく理解すれば、そのように思えるのですが。
中括弧の後に余分なセミコロンがある。そして、それ以外のものが今を指しているのかは不明です。
マクロ展開を自動化してどうなるかを簡単に確認する方法がないようなのが残念です。自分でスクリプトを作れれば別ですが。
ありがとうございました。マクロのwhileの後にセミコロンがないのは、理由があるのです。