if(FileReadStruct(handle,temp_rate)!=60)
{
IsError=true;
Print(__FUNCSIG__," Не удалось прочитать данные из файла по причине ошибки ",GetLastError());
return;
}
Tuttavia, alcune funzioni sono di tipo nullo e altre restituiscono un valore, quindi restituisco zero da esse:
return(0);
Posso fare una macro magica che mi sostituisca quella giusta in ogni caso?
Tuttavia, alcune funzioni sono di tipo nullo e altre restituiscono un valore, quindi restituisco zero da esse:
Posso fare una tale macro magica, che in ogni caso sostituirebbe per me la variante necessaria?
L'uso di return in una macro è una pistola armata puntata alla propria gamba, e quando è combinata con if - si trasforma in un cannone))) Ma se vuoi davvero farlo:
#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);
...
Non l'ho testato, ma dovrebbe funzionare. Ha anche ritrasformato la pistola in una pistola)))
Quindi passo nell'ultimo parametro o un valore di ritorno, o uno vuoto, che si trasformerà in
return ;
e uno spazio non significa nulla. Naturalmente, come ho dimenticato che può essere usato senza le mie parentesi preferite.
return(x);
return x; //равноценны
A proposito, potresti dire perché questo costrutto è dentro un ciclo, che può essere eseguito solo una volta? È un cannone trasformato in una pistola? Possibili situazioni come la ricorsione infinita o qualcosa del genere?
Quindi passo nell'ultimo parametro o un valore di ritorno, o uno vuoto, che si trasformerà in
e uno spazio non significa nulla. Naturalmente, come ho fatto a dimenticare che può essere usato anche senza le mie staffe preferite.
Inoltre, potresti dirmi perché questo costrutto è infilato in un ciclo che può essere eseguito solo una volta? È una pistola trasformata di nuovo in una pistola? Possibili situazioni come la ricorsione infinita o qualcosa del genere?
if (condizione) CHECK_READ(h,r,0); altrimenti CHECK_READ(h,r,1);
Distribuire la macro senza il wrapper do-while e vedere cosa succede))
Vladimir Simakov: if (condizione) CHECK_READ(h,r,0); altrimenti CHECK_READ(h,r,1);
Distribuire la macro senza il wrapper do-while e vedere cosa succede))
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;
};
Questo sembra essere il caso, se ho capito bene il principio di sostituzione.
Punto e virgola superfluo dopo le parentesi graffe. E non è chiaro a cos'altro si riferisca ora.
È un peccato che apparentemente non ci sia un modo semplice per automatizzare l'espansione delle macro per vedere cosa succede. A meno che non si possa fare il proprio script.
Grazie! C'è una ragione per cui non c'è un punto e virgola dopo while nella macro.
Lo vuoi per mt4 o mt5? Ho cancellato il codice che ho postato. Non ho notato subito che mt4 era discusso qui
MQL4
MQL4
Ti consiglio - ci sono un sacco di cose buone da trovarehttps://www.mql5.com/ru/forum/131859/page6#comment_3359705
Una domanda più specifica e forse interessante:
Uso lo stesso costrutto in diverse funzioni
Tuttavia, alcune funzioni sono di tipo nullo e altre restituiscono un valore, quindi restituisco zero da esse:
Posso fare una macro magica che mi sostituisca quella giusta in ogni caso?
Una domanda più specifica e forse interessante:
Uso lo stesso costrutto in diverse funzioni
Tuttavia, alcune funzioni sono di tipo nullo e altre restituiscono un valore, quindi restituisco zero da esse:
Posso fare una tale macro magica, che in ogni caso sostituirebbe per me la variante necessaria?
L'uso di return in una macro è una pistola armata puntata alla propria gamba, e quando è combinata con if - si trasforma in un cannone))) Ma se vuoi davvero farlo:
Non l'ho testato, ma dovrebbe funzionare. Ha anche ritrasformato la pistola in una pistola)))
Grazie!
Quindi passo nell'ultimo parametro o un valore di ritorno, o uno vuoto, che si trasformerà in
return ;e uno spazio non significa nulla. Naturalmente, come ho dimenticato che può essere usato senza le mie parentesi preferite.
A proposito, potresti dire perché questo costrutto è dentro un ciclo, che può essere eseguito solo una volta? È un cannone trasformato in una pistola? Possibili situazioni come la ricorsione infinita o qualcosa del genere?
Grazie!
Quindi passo nell'ultimo parametro o un valore di ritorno, o uno vuoto, che si trasformerà in
e uno spazio non significa nulla. Naturalmente, come ho fatto a dimenticare che può essere usato anche senza le mie staffe preferite.
Inoltre, potresti dirmi perché questo costrutto è infilato in un ciclo che può essere eseguito solo una volta? È una pistola trasformata di nuovo in una pistola? Possibili situazioni come la ricorsione infinita o qualcosa del genere?
if (condizione) CHECK_READ(h,r,0); altrimenti CHECK_READ(h,r,1);
=
Questo sembra essere il caso, se ho capito bene il principio di sostituzione.
Punto e virgola superfluo dopo le parentesi graffe. E non è chiaro a cos'altro si riferisca ora.
È un peccato che apparentemente non ci sia un modo semplice per automatizzare l'espansione delle macro per vedere cosa succede. A meno che non si possa fare il proprio script.
Grazie! C'è una ragione per cui non c'è un punto e virgola dopo while nella macro.