Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 427

 
Artyom Trishkin:
E leggere quante volte viene inizializzata una variabile statica. E la domanda stessa scomparirà per la sua assurdità ;)

Allora come capire questo: le variabili locali dichiarate con la parola chiave static mantengono i loro valori per tutta la durata della funzione. Ogni volta che la funzione viene richiamata, queste variabili locali contengono i valori che avevano nella chiamata precedente. Una variabile dichiarata in una funzione definita dall'utente non è locale?

 
Alekseu Fedotov:

Sulla seconda domanda,

se la prima zecca non prende, la seconda lo farà.

Restituisce l'orario di apertura del bar. Sarà lo stesso in tutto il bar.
 
novichok2018:

Allora come capire questo: le variabili locali dichiarate con la parola chiave static mantengono i loro valori per tutta la durata della funzione. Ogni volta che la funzione viene richiamata, queste variabili locali contengono i valori che avevano nella chiamata precedente. Una variabile dichiarata in una funzione definita dall'utente non è una variabile locale?

Il modificatore static lo rende statico, e viene memorizzato in memoria per le variabili statiche, non locali.
 
Artyom Trishkin:
Restituisce l'orario di apertura del bar. Sarà lo stesso in tutto il bar.

Ce l'ho proprio qui. Grazie.

 
Artyom Trishkin:
Il modificatore statico lo rende statico ed è già memorizzato in memoria per le variabili statiche, non per le variabili locali.

È qui che non capisco. Secondo me, non importa dove è memorizzata, con il codice si azzera il valore della variabile ogni volta che si accede alla funzione. Per quale motivo?

 
novichok2018:

È qui che non capisco. Secondo me, non importa dove è memorizzata, con il codice si azzera il valore della variabile ogni volta che si accede alla funzione. Per quale motivo?

Per il primo lancio - quando lo dichiarate. Dopo di che, sta a voi controllare il suo contenuto.
 
Artyom Trishkin:
Per il primo lancio - a dichiarazione. Inoltre, tu stesso controlli il suo contenuto.

Tuttavia, secondo me, non è questo il caso: il codice viene letto riga per riga ogni volta e ogni volta tocca lo zero, e alla prima esecuzione anche se non c'è inizializzazione, la variabile prenderebbe un valore zero. Quindi, la stringa statica datetime New_Time=0; costringe il programma a fare un lavoro inutile.

 
novichok2018:

Tuttavia, a mio parere, questo non è vero: il codice viene letto riga per riga ogni volta e ogni volta tocca lo zero, e alla prima esecuzione, anche se non c'è inizializzazione, la variabile prenderebbe un valore nullo. Quindi, la stringa statica datetime New_Time=0; costringe il programma a fare un lavoro inutile.

Ti dicono "no", tu dici "sì"...
Basta stampare il valore della variabile nel diario e guardare. Perché litigate quando la gente vi spiega le cose più semplici?
Potete andare avanti senza di me fino a quando non lo controllerete voi stessi.
 
Artyom Trishkin:
Tu dici no, tu dici sì...
Basta stampare il valore della variabile nel registro e vedere. Perché preoccuparsi quando le cose più semplici ti vengono spiegate?
Poi, senza di me, fino a che non lo controlli tu stesso.
Non dovete essere offesi. Ma a quanto pare i programmatori leggono il testo in modo diverso. Ho sempre creduto che se c'è scritto "equiparare a zero" in un programma, il computer deve equiparare a zero, indipendentemente dal fatto che sia all'avvio o al riferimento ripetuto a una linea di codice. E non c'è bisogno di visitare alcun giornale per dimostrare che l'inizializzazione zero non è necessaria, basta rimuoverla: static datetime New_Time; produce assolutamente gli stessi risultati di static datetime New_Time=0; non so quanto sia più veloce il funzionamento del programma, lo ammetto, non è affatto significativo, ma comunque rimuove il "gesto non necessario".
 
novichok2018:
Non si offenda. Ma i programmatori ovviamente leggono il testo in modo diverso. Ho sempre considerato che se c'è scritto "equiparare a zero" nel programma, il computer deve equipararlo a zero indipendentemente dal fatto che sia al lancio o al riferimento ricorrente a una linea di codice. E non c'è bisogno di visitare alcun giornale per dimostrare che l'inizializzazione zero non è necessaria, si può semplicemente rimuoverla: static datetime New_Time; produce assolutamente gli stessi risultati di static datetime New_Time=0; Non so quanto sia più veloce il funzionamento del programma, ammetto che non è affatto significativo, ma comunque rimuove il "gesto non necessario".
La testardaggine non mi offende. Perché?
E le variabili devono essere inizializzate esplicitamente. Un giorno si arriverà all'importanza dell'inizializzazione. Nel frattempo, potete buttare via tutto ciò che sta dentro le parentesi graffe.
Motivazione: