Qualsiasi domanda da un PROFI a un SUPER PROFI - 1. - pagina 3

 
Santa semplicità (c) Jan Hus
 
Sorento:
Santa semplicità (c) Jan Hus

Cosa vuoi dire?
 
drknn:

Cosa vuoi dire?

Non è così semplice.

ora all'interno della funzione - lavora con la variabile passata.

Come ci insegna la matematica - se avete passato una pseudo-variabile per indirizzo - tutte le meraviglie in essa sono sparite.

Ma se il pool di indirizzi è allineato con le costanti - tutto sarà diverso.

0 diventa 1 e viceversa.

;)

 
Perché avresti bisogno di tali complicazioni in un EA/indicatore/script, come il passaggio di una variabile per indirizzo? Cosa intendete con i termini: pseudo-variabile, pool di indirizzi e allineamento costante?
 
drknn:
Perché avete bisogno di tali complessità in un EA/indicatore/script, come passare una variabile per indirizzo? Cosa intendete con i termini: pseudo-variabile, pool di indirizzi e allineamento costante?

I compilatori e gli interpreti sono simili.

Quindi pensateci.

Come vengono passati i parametri (variabili) a una funzione, e se un'espressione viene passata a una funzione...

;)

 
Sorento:

Anch'io condivido i miei dubbi.

Non pretendo di essere un super-professionista, non raggiungo il livello di un professionista - nessuno legge i messaggi... è chiaro all'occhio del cavallo.

Ma più scrivo codice (non molto finora) - mi sorge una domanda:

Come vengono passati i parametri nelle funzioni?

(per nome o per valore?)

Ho il sospetto che le variabili di stringa diventino nervose quando le si passa...

;)


Anche se non mi considero un professionista o un super professionista, ma cercherò di rispondere :).

MT è implementato in C2C++ e gli sviluppatori raccomandano di consultare gli standard di questo linguaggio in caso di incertezza.

Secondo lo standard C2C++, tutti i parametri eccetto gli array sono passati per valore, incluse le espressioni. Cioè, vengono passate copie di parametri: cambiare un parametro passato per valore all'interno di una funzione chiamata non causa il cambiamento del parametro nella funzione chiamante esterna. Se la modifica è richiesta, deve essere passata per riferimento (per indirizzo) - cioè, viene passato l'indirizzo in cui si trova la variabile passata come parametro. Allora il valore situato a questo indirizzo può essere cambiato, l'indirizzo non può essere cambiato. Tutti gli array sono passati per riferimento, cioè gli indirizzi sono passati immediatamente: altrimenti, un'enorme quantità di dati dovrebbe essere copiata attraverso lo stack.

Per evitare che un parametro passato per riferimento venga cambiato all'interno della funzione chiamata, C/C++ usa il modificatore const.

In C2C++, le stringhe sono array di caratteri, con una differenza: un tale array deve finire con il terminatore di stringa '\0'.

In MCL, una stringa è una struttura che contiene la dimensione e il puntatore alla stringa (cioè l'array di stringhe stesso), se gli esempi sono da credere.

Questo esempio è per C2C++ :

//----
struct MqlStr
  {
   int               len;
   char             *string;
  };

Qui char * è un puntatore a una variabile di tipo carattere (tipo char). Il tipo di puntatore stesso (char*, int*, double*.......) è sempre un intero - è un indirizzo di cella. Questo significa che la variabile non memorizza una stringa, ma l'indirizzo di una cella. Il valore del carattere stesso può essere raggiunto in questo modo: *stringa o stringa[0]. Per funzionare, dovremmo sempre allocare memoria per un array se non è posizionato staticamente, cioè, la sua dimensione non è specificata nella descrizione, ad esempio, così

char string[1025] ;

è un array di caratteri, di 1025 elementi.... Se l'ultimo carattere (string[1024]='\0'), l'array potrebbe essere trattato come una stringa di 1024 caratteri.

Gli elementi della stringa possono essere ricevuti come elementi del solito array string[i]. Quando si posiziona dinamicamente, ad una stringa viene assegnato + 1 elemento e l'ultimo carattere della fine della stringa è......

Di conseguenza, la stringa è sempre passata per riferimento. Se è proibito modificarlo dipende dall'implementazione di ICL e può essere controllato con un esempio: passare una stringa alla funzione, cambiare il valore lì e leggerlo (questo valore) dopo la fine della funzione chiamata.

Buona fortuna.

 
VladislavVG:

Di conseguenza, la stringa è sempre passata per riferimento. Se possono essere modificati dipende dall'implementazione MCL e può essere verificato con un esempio: passare una stringa a una funzione, cambiare il valore lì e leggerlo (questo valore) dopo che la funzione chiamata è finita.

La modifica non è vietata. Controllato.
 
drknn:

Oh, che palle. Deve essere una domanda per gli sviluppatori, o non è tutto a posto nella DLL. Non sono un programmatore C++ - ho provato a fare un paio di programmi una volta, ma ho riscontrato che mentre hai una shell C++ installata, tutto funziona. Ma non appena si trasferisce l'eseguibile su un altro computer, si nota immediatamente la mancanza di qualche ciclo di dll. Inoltre non mi piace lavorare con le corde. Ho rinunciato a quel linguaggio e mi sono stabilito su Delphi. Forse puoi provare a fare la tua dll su di essa - tali dll sono abbastanza normali con il terminale...

P.S.

Quindi, non capisco perché tutti lodano così tanto il C++, se anche a livello di scelta di una shell per programmare sorgono problemi con questo linguaggio...

Il fatto è che tutte le librerie e gli script con queste librerie funzionano bene se li carichi manualmente su un grafico. Funzionano anche se li caricate sul grafico programmaticamente dal processo corrente.

Il problema si verifica quando li carichi da un processo remoto.

=====================================

Per quanto riguarda il trasferimento del codice su un altro computer. Molto probabilmente stavi migrando una versione del debugger. Estrae le librerie di debug da Studio. Dovreste aver compilato il rilascio. Allora tutto avrebbe funzionato ovunque.

 
Ho sbagliato a chiamarlo per analogia.
 
TheXpert:
Ho sbagliato a chiamarlo per analogia.

Giusto. Ho anche sbattuto le palpebre ai termini del titolo di questo thread - non avevo notato che i nomi erano diversi - la mia attenzione era già sintonizzata su uno schema particolare.