Bug del compilatore con il parametro template = void* - pagina 12

 
fxsaber:

Sviluppatori. Come è con OrderSend, per esempio.

Ecco un esempio https://www.mql5.com/ru/forum/295485/page11#comment_9959761

Pensavo che si sarebbero stancati di rispondere alla stessa domanda e che avrebbero finalmente emesso un avvertimento - no, non l'hanno fatto

Quindi MQL non è per i commercianti, ma per i programmatori

Баг компилятора при параметре шаблона = void*
Баг компилятора при параметре шаблона = void*
  • 2018.12.20
  • www.mql5.com
Ошибка компилятора. Билд 1961, 64 бит...
 
A100:

È sufficiente disabilitare gli avvertimenti basati sui numeri (non puoi vederli attraverso il MetaEditor, ma ci sono), cosa che faccio attraverso il comando compilatore

Puoi dirmi come fare?
 
Alexey Navoykov:
Puoi dirmi come si fa?

I risultati della compilazione sono emessi in un file e da lì vengono estratte le linee che non hanno numeri di avviso predefiniti (dopo la parola avviso c'è un numero)

 
A100:

I risultati della compilazione sono emessi in un file e da lì vengono estratte le linee che non hanno numeri di avviso predefiniti (la parola avviso è seguita da un numero)

Come faccio a non far apparire questi avvertimenti in ME? Dove metto questi numeri?
 
Alexey Navoykov:
Come faccio a non far apparire questi avvertimenti in ME? Dove metto questi numeri?

Compilo dalla riga di comando e tutti i messaggi vengono visualizzati anche dalla riga di comando. Non può essere collegato all'IDE MetaEditor. Questa è la compilazione finale, per così dire, che controlla gli avvisi importanti. Non guardo nemmeno più gli avvertimenti nell'IDE - ce ne sono troppi

 
A100:

Quindi MQL non è per i commercianti, ma per i programmatori

Non essendo un programmatore, uso MQL. Finisci quel mantra sui programmatori. Penso di avere una migliore padronanza di MQL di un utente medio e forse di un libero professionista.

Quindi posso ragionevolmente dire che capisco i problemi affrontati dalla maggior parte degli utenti della lingua.

 
A100:

Compilo sulla linea di comando e tutti i messaggi sono anche emessi sulla linea di comando. Non può essere collegato a MetaEditor IDE. Questa è la compilazione finale - controlla le avvertenze importanti

Beh, non è interessante... A proposito, perché compilate dalla linea di comando?
 
Alexey Navoykov:
Ah, non è interessante... A proposito, perché compilate sulla linea di comando?

Diciamo che è uscita una nuova build e / o ho bisogno di ricompilare tutti e o solo alcuni file - imposto una lista e solo la lista viene compilata / diverse liste

O devo ricompilare in un'altra build - ho impostato il numero di build e la lista e il file di comando fa tutto da solo

 
A100:

E che senso ha un tale valore, se si ottengono solo 4 byte su 8. Dato che gli sviluppatori hanno proibito esplicitamente di convertire il valore di un puntatore in ulong (prima si poteva, e credetemi i bit alti erano non-zero a quel tempo).

È stato dimostrato sperimentalmente che questo numero si comporta esattamente come si comporterebbe un indice di puntatore in un array di puntatori se tale array assegnasse numeri ai puntatori in modo strettamente consecutivo e, se un intervallo di numeri fosse liberato, li riutilizzasse dall'ultimo numero liberato al primo in ordine inverso. Se qualcuno volesse duplicare questo sistema di descrittori nella propria architettura, ad esempio sostituendo un tipo puntatore con una struttura di dimensione int, un comportamento comprensibile (restituire true come tipo inline per un oggetto distrutto, mentre questo comportamento proibisce il sovraccarico di un certo numero di operatori logici utili con i puntatori, questo è un completo facepalm) e tutti i benefici del tipo semplice, pur mantenendo uno stretto controllo sulla popolazione di oggetti e puntatori tramite contatore, la capacità di ottenere questo numero dall'oggetto stesso farebbe risparmiare una quantità significativa di pa

E parlando di compiti più banali - questo numero indica il numero di oggetti creati nel sistema ed è utile per il debug in qualsiasi architettura basata su liste dinamiche. Non a caso, non sono il primo che ha capito come "imbrogliare" il divieto di ottenerlo, e mi è stato anche detto un modo più veloce, anche se solo per 4.
 
A100:

Per esempio, è uscita una nuova build e / o ho bisogno di ricompilare tutti o solo alcuni file

Capisco, ma questo è un caso speciale. Dopo tutto, passiamo la maggior parte del nostro tempo a codificare e compilare nell'IDE, quindi disabilitare gli avvisi non necessari lì sarebbe molto utile.

Personalmente ci trovo un sacco di cose inutili. Per esempio, ci sono avvertimenti sulla conversione implicita in stringa. Non ricordo casi in cui potrebbe causare conseguenze spiacevoli. Nel 99% dei casi la stringa è usata solo per stampare testo sullo schermo o scriverlo in un file.

Oppure, supponiamo, quando il tipo del valore di ritorno della funzione è bool, e voi restituite 0 o 1, anche il compilatore si lamenterà, dicendo che il tipo non è booleano. VS non lo ha. Queste costanti sono ammissibili per bool. Per esempio, mi è più comodo scrivere return 0 piuttosto che return false perché è molto più facile da percepire visivamente.

Quindi, il mio registro è quasi completamente pieno di questi due avvertimenti. Vorrei sbarazzarmene).

Quando lo farò, forse lo finirò io stesso. Ho un sacco di idee. Per ora ho solo fatto scorrere automaticamente il log dopo aver finito la compilazione fino all'inizio del primo errore (se c'è). Senza di esso dovevo scorrere manualmente la lista (e non è così grande), cercando il messaggio di errore. Che rottura di scatole.

Motivazione: