GUI in crowdsourcing. Open beta testing. - pagina 48

 

Peter, puoi trattarmi come vuoi, è un tuo diritto, ma ascolta il consiglio di un compagno un po' più esperto.

#include <GUI_DRIVE.mqh>
#include "..\Files\CORES.mqh"
#include "..\Files\Internal_API.mqh" 

Il fileGUI_DRIVE.mqh è collegato per primo nel codice. Niente è dichiarato prima di esso.

Se lo compilate otterrete un errore di G_CORE mancante, ed è logico perché l'array non è dichiarato in questo file!

Conclusione? Bene, la conclusione è elementare: l'array deve essere dichiarato in questo file. Alla fine, è questo file che opera con questo array, perché questo file è il "motore"! Pertanto, la dichiarazione dell'array stesso in esso è corretta, secondo il contesto d'uso.

Il file successivo,CORES.mqh, riempie l'array con la descrizione degli elementi del modulo.

Naturalmente, quando si compila l'EA stesso con questi file, se l'array è dichiarato nel primo file, non ci saranno problemi di compilazione, perché quando si compila il secondo file, l'array sarà già visibile nel contesto del programma.

Ma quello che stiamo dicendo è che ogni file dovrebbe compilare senza errori. Dato che il secondo file riempie l'array G_CORE con elementi, incontreremo naturalmente un errore durante la compilazione di questo file, se l'array non è dichiarato.

E qui usiamo, come ha detto Alexander, uno stub.

Pyotr, tu sei un grande fan delle definizioni, quindi saprai cosa sta succedendo.

Nel file GUI_DRIVE si dichiara un array globale di elementi del kernel G_CORE, dopo di che il file dovrebbe compilare senza errori.

Poi in questo file si aggiunge una definizione.

#define __DRIVE__

Passate al file Cores. Prima di dichiarare un array, usate il preprocessore di compilazione.

#ifndef __DRIVE__
int G_CORE[][prop_limit];
#endif

E poi si riempie l'array. Naturalmente, dovrete cambiare un po' il modo in cui riempite l'array, per farlo senza dichiarazione.

Penso che abbiate capito il succo: se il file CORES viene compilato, il default__DRIVE__ non c'è più e il codice della dichiarazione dell'array viene compilato e tutto funziona bene.

Se il file è compilato come parte dell'EA, allora dopo aver compilato il primo file, la define è dichiarata e nel secondo file l'array non è dichiarato perché il compilatore "taglia" questo pezzo di codice.

Spero davvero di essere stato chiaro.

Lo ripeto di nuovo: ogni file deve essere compilato senza errori. Se avete delle dipendenze, dovete prevedere adeguatamente la loro posizione e aggiungere processori di ricompilazione come necessario.

Quando avete ogni file compilato senza errori, avete più fiducia nell'integrità dell'intero sistema.

Inoltre, non dimenticate di aggiungere una proprietà in ogni file:

#property strict

Questa proprietà dà un controllo più stretto sul codice.

 
Questo ha poco senso pratico. Se ogni file viene compilato senza errori, indipendentemente dall'integrità dell'assemblaggio complessivo, l'utente potrebbe facilmente perdere la connessione di uno dei file. È facile da dimenticare.

Comunque, è così insignificante che non ci perdo tempo. Questa è una completa assurdità. È un'assurdità.
 
Sì, puoi fare in modo che ogni file sia compilato separatamente senza errori manipolando il preprocessore.

Ma è qui che si trova l'errore. Sono parti di un tutto e non devono "ritrarre" l'indipendenza dalle altre parti. E in effetti, l'utente può decidere che non tutti i file sono necessari, perché funziona così com'è.

Perdere tempo in un'attività che ha un senso molto dubbio? Chi sto cercando di ingannare? Il compilatore?

I compagni "esperti" sembrano aver paura della sua voce severa e credono che abbia sempre ragione in tutto. Quindi cercano di adattarsi, anche se non ha senso.

Avevo migliaia di avvertimenti nel mio codice in linguaggio di markup perché dovevo mettere (sring) prima delle costanti. Posso immaginare come sarebbe il codice se mettessi una conversione di tipo prima di ogni numero. Ma almeno non ci sarebbero stati avvertimenti.
 
Реter Konow:
Sì, manipolando il preprocessore si può fare in modo che ogni file venga compilato separatamente senza errori.

Ma è qui che si trova l'errore. Sono parti di un tutto e non devono "ritrarre" l'indipendenza dalle altre parti. E in effetti, l'utente può decidere che non tutti i file sono necessari, perché funziona così com'è.

Perdere tempo in un'attività che ha un senso molto dubbio? Chi sto cercando di ingannare? Il compilatore?

I compagni "esperti" sembrano aver paura della sua voce severa e credono che abbia sempre ragione in tutto. Quindi cercano di adattarsi, anche se non ha senso.

Avevo migliaia di avvertimenti nel mio codice in linguaggio di markup perché dovevo mettere (sring) prima delle costanti. Posso immaginare come sarebbe il codice se mettessi una conversione di tipo prima di ogni numero. Ma almeno non ci sarebbero stati avvertimenti.

Ci sono alcuni compagni che stanno scrivendo un software separato che cambia leggermente l'interfaccia del meta-editor stesso - solo per facilità d'uso!

Questo standard è come usare una tastiera - invece di digitare lettere in codice morse attraverso uno squeaker. Gli stub non cambiano nulla, a parte il continuo sfogliare i file in fase di compilazione. Ma uno stub è 2 righe di codice. Quanto tempo passeremmo su questa navigazione solo per premere un pulsante. E quante volte gireremo 7 e cosa diventerà più razionale per non sprecare le nostre vite digitando lettere attraverso uno squeaker

Notate che non stiamo parlando di oggetti o classi, stiamo solo parlando di risparmiare tempo. Il tuo tempo... E tu stesso puoi trovare uno standard per scriverli.
 
Per non parlare della codifica in russo, che è discriminata di default dall'ambiente di sviluppo in lingua inglese. Anche per adattarsi e lasciare al mio cervello un misero 30% di prestazioni, mentre posso usare tutto il 100% in russo?

Alla faccia del prezzo della "professionalità".
 
Реter Konow:
Per non parlare della codifica in russo, che di default è discriminata dall'ambiente di sviluppo in lingua inglese. Dovrei anche adattarmi e lasciare al mio cervello un misero 30% di prestazioni, mentre posso usare tutto il 100% in russo?

Alla faccia del prezzo della "professionalità".

I professionisti usano i loro tipi di dati nel loro codice. In generale, non importa in che lingua sono.

Ma se una funzione si aspetta un intero in questo ordine: Accettare (larghezza, altezza).

Invece ci confondiamo accidentalmente e scriviamo

Accept (height, width) - allora il copulatore stesso dice che abbiamo un errore qui. Se funziona per te - non è una questione di lingua o di oggetti. Si tratta solo di non dover cercare questo errore da soli

 
Alexandr Andreev:

Nel codice professionale, gli individui usano i propri tipi di dati. Non importa in che lingua sono.

Ma se una funzione si aspetta un intero in questo ordine: Accettare (larghezza, altezza).

Invece ci confondiamo accidentalmente e scriviamo

Accept (height, width) - allora il copulatore stesso dice che abbiamo un errore qui. Se funziona per te - non è una questione di lingua o di oggetti. Si tratta solo di non dover cercare questo errore da soli.

Questo è un ramo per testare soluzioni già pronte e comunicarle agli utenti.

Ho bisogno di tester costruttivi, non di "professionisti" ambiziosi che cercano qualcosa di cui lamentarsi.

Non ho intenzione di discutere di questioni astratte. Hai collegato il pannello assemblato, hai trovato dei bug e li hai segnalati? Grazie mille! Fare i furbi e prendersela con le cose che non si capiscono - addio.
 
Signori furbi, questo non è il vostro posto.

Per coloro che non hanno eseguito l'editore e non hanno collegato il pannello, ma stanno "insegnando", la conversazione è breve.

Il resto di voi, benvenuti!
 
Алексей Барбашин:

Peter, puoi trattarmi come vuoi, è un tuo diritto, ma accetta il consiglio di un compagno un po' più esperto.

.......

Inoltre non dimenticate di aggiungere una proprietà in ogni file:

#property strict

Questa proprietà dà un controllo più stretto sul codice.

è per 5 - è sempre lo stesso lì!

anche se in generale sono d'accordo: un sacco di avvertimenti alla compilazione non aumenta la fiducia nel codice.

 
Igor Zakharov:

è fatto per cinque - è sempre rigoroso!

anche se sono d'accordo in generale: un sacco di avvertimenti in fase di compilazione non aumenta la fiducia nel codice.

Rimuoverò gli avvertimenti. Temporaneamente.