La differenza tra esterno e ingresso - pagina 5

 
Alexey Navoykov:

Immaginate che queste inizializzazioni siano fatte in diversi file include. Poi il risultato finale dipenderà dall'ordine in cui questi file sono inclusi.

Bene - anche bug così evidenti con questi esterni

Quindi sto scrivendo che non hanno senso, sono solo per la compatibilità con il vecchio codice - sostituire extern con input e correggere gli errori... scopo poco chiaro.... extern non ha senso - cercatelo

 
Alexey Navoykov:

Sfortunatamente, l'implementazione delle variabili esterne in MQL5 non è finalizzata, ed è per questo che non ne consiglio l'uso - potrebbe causare problemi. Intendo la mancanza di controllo sull'inizializzazione obbligatoria una tantum di queste variabili.

Per esempio, si può scrivere in questo modo:

e non ci sarà alcun errore. Immaginate che queste inizializzazioni siano eseguite in diversi plugin. Poi il risultato finale dipenderà dall'ordine in cui questi file sono inclusi.

Oppure possiamo scriverlo così (file eseguibile):

qui non abbiamo inizializzato affatto la variabile extern, ma non c'è nemmeno un errore.

Di conseguenza, non c'è controllo sul fatto che le stesse variabili siano definite in altri file o meno. Si può cambiare accidentalmente il suo nome, ma il programma compilerà come se non fosse successo nulla, anche se in altri file abbiamo una variabile con un nome diverso.

Tutto sommato, non si adatta da nessuna parte. Ecco perché è meglio usare le funzioni invece delle variabili esterne, che sono garantite per avere una sola definizione, né più né meno.

Con questo approccio, non si dovrebbe usare affatto un computer. Perché se chiudi gli occhi e picchietti sulla tastiera, otterrai delle sciocchezze.

Il vero problema in extern si verifica quando si cerca di fare extern da input. Non ricordo i dettagli, è successo molto tempo fa. Come risultato, ho rifiutato del tutto l'extern, ho dichiarato una semplice variabile nel file include e ho impostato il suo valore nell'EA inite attraverso una chiamata di funzione.

 
Igor Makanu:

ecco - anche bug così evidenti con questi esterni

è per questo che sto scrivendo che non hanno senso, sono solo per la compatibilità con i vecchi codici - sostituire extern con input e correggere gli errori... altrimenti è scritto in help... scopo poco chiaro.... L'esterno non ha senso - non importa quanto duramente si guardi.

C'è un senso. In MT5 nei file inclusi extern non è inserito affatto.

 
Dmitry Fedoseev:

Ha senso. In MT5, extern nei file include non è affatto un input.

Perché dovreste aggiungere externs ai file include?

Non so cosa sta succedendo nel mondo moderno della scrittura dei programmi, ma ho imparato a scrivere in stile procedurale, e poi ho iniziato a usare OOP. Il primo e il secondo stile implicano che ogni unità logica deve essere completamente funzionale quando viene trasferita a un altro programma, cioè, si scrive una funzione - la sua descrizione (header) contiene tutti i parametri che usa - non ha bisogno di iprodotti - si taglia e incolla questa funzione in un altro file, si "sposta" così com'è - la stessa cosa con le classi.

E gli iprouts stessi dovrebbero creare solo l'interfaccia utente, dovrebbero essere sempre descritti nel file principale.


E usando extern nel file include, imho modo per ottenere difficile rintracciare il bug,@Alexey Navoykov sopra ha mostrato come succede, purtroppo più della metà dei nomi delle variabili tutti i programmatori hanno a una lettera lo stesso nome, la differenza massima nell'uso di lettere maiuscole/piccole, come esempio MagicNumber o Magic - se si guarda KB, poi ogni altra variabile, quindi nel vostro metodo è una minaccia per "ombra" extern nella sua variabile, per fortuna poche persone ora usano ecterps

 
Igor Makanu:

perché aggiungere gli iprtu nei file include?

Non so cosa sta succedendo nel mondo moderno della scrittura dei programmi, ma ho imparato a scrivere in stile procedurale, poi ho cominciato a usare OOP, sia nel primo che nel secondo stile è implicito che ogni unità logica deve essere completamente funzionale quando viene trasferita a un altro programma, cioè hai scritto una funzione - nella sua descrizione (nel titolo) hai tutti i parametri che usa - non ha bisogno di iprouts - tagli questa funzione e inserita in un altro file, si "sposta" così com'è - lo stesso con le classi.

E gli iprout stessi dovrebbero creare solo l'interfaccia utente, dovrebbero essere sempre descritti nel file principale.

Non è così. Nei file include aggiungere gli extern. In modo che nei file di inclusione si possano usare gli input dichiarati nel file principale.

A proposito, è quasi sempre necessario appena si inizia a usare i file di inclusione.

 
Dmitry Fedoseev:

Non così. Aggiungere externs ai file include. In modo che nel file include si possano usare gli input dichiarati nel file principale.

Per inciso, questo è ciò di cui avete bisogno quasi appena iniziate a usare i file di inclusione.

dare un esempio del perché si dovrebbe usare extern

 
Igor Makanu:

dare un esempio dell'opportunità di usare extern

È in giro da un po' di tempo ormai.

 
Dmitry Fedoseev:

Se si adotta questo approccio, non si dovrebbe usare affatto il computer. Perché se chiudi gli occhi e picchietti sulla tastiera, ottieni merda.

Certo, otterrete la spazzatura, ma difficilmente compilerà. Il compito del compilatore non è quello di compilare spazzatura. E in questo caso non riesce a farlo.
 
Dmitry Fedoseev:

È qui da un po' di tempo ormai.

Ecco di cosa sto parlando.

Il tuo esempio è la generazione di bug nascosti, il nome della variabile x è spesso usato.... ha scritto sopra

Imho dovrebbe essere così:

extern int x;

int z()
  {
   static int x;
   x=122;
   return x;
  }
 
Igor Makanu:

Ecco di cosa sto parlando.

Il tuo esempio è lo spawning di bug nascosti, il nome della variabile x è spesso usato.... ha scritto sopra

Imho dovrebbe essere così:

Assolutamente no. La variabile x dovrebbe essere disponibile non solo in una funzione, ma in tutte le funzioni. E ancora di più - dovrebbe essere disponibile nel file principale così come in tutti i file collegati.