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

 
Ilya Malev:
Per quanto riguarda "i programmatori normali ricordano le priorità delle operazioni C++ come una tabella di moltiplicazione",
Nessuno ha espresso una tale tesi. Io stesso uso la scheda nella Documentazione
 
fxsaber:

Esattamente! Non è affatto un professionista, tali avvertimenti mi hanno aiutato 100 volte.

Non sono nemmeno un professionista, ma sono stato infastidito da tali avvertimenti più di una volta, perché tra decine (e a volte centinaia) di tali avvertimenti superflui si sono persi quelli veramente importanti e necessari

E non è chiaro che tipo di avvertenze si possono avere se si mettono le parentesi ovunque? E se si trattava di altri casi, non c'è bisogno di mischiare le cose

 
A100:

In modo che questo concetto possa essere implementato nel compilatore. Nessuno vieta di mettere parentesi extra. La domanda riguarda gli avvertimenti non necessari

Bene, nello studio questo è configurato da un livello.

E in realtà nessuno vi impedirà di rimuovere questi avvertimenti cambiando il codice in modo che al compilatore piaccia

 
TheXpert:

Beh, nello studio, è impostato da un livello.

E nessuno vi impedisce effettivamente di rimuovere questi avvertimenti cambiando il codice in modo che al compilatore piaccia

È un ostacolo, perché poi ci sono delle parentesi in più. Ma nessuno impedisce agli amanti di questa causa di mettere delle parentesi in più, e soprattutto - tutti ne sarebbero felici

Dubito che sia configurabile in studio - perché non ci sono avvisi ridondanti su presunte parentesi dimenticate (almeno di default) e quindi non c'è materia da configurare

 
A100:

Non mi dispiace. Basta lasciare questi avvertimenti nel vecchio MQL4.

È così che rimangono per la maggior parte

void OnStart()
 {
  int a=0,b=0,c=0,d=0,e=0,f=0;
  a=b|d/e^f|a^b&d^e%f|c;
 }

In µl4 impreca su tutto, in µl5 solo sulle operazioni << e >>, il che è abbastanza logico, perché la loro logica di sovraccarico sarà molto spesso molto diversa dalla logica in base alla quale sono state date priorità. Questi avvertimenti mi hanno aiutato molte volte, o almeno non mi hanno infastidito troppo. Beh, e le operazioni logiche che definiscono la logica del codice && e ||, che dovrebbero essere comunque delimitate da parentesi...

 
A100:

Nemmeno io sono un professionista, ma sono stato infastidito da tali avvertimenti più di una volta perché tra decine (e a volte centinaia) di tali avvertimenti superflui ho perso quelli veramente importanti e necessari

E non è chiaro quali avvertenze si possono avere se si mettono parentesi ovunque? E se si trattasse di altri casi, non c'è bisogno di mettere tutto insieme

Di solito succede che bisogna correggere rapidamente qualche condizione. Per esempio, ho fatto un errore in una condizione in cui ho scritto && in un posto e avrei dovuto sostituirlo con ||. L'ho corretto e ho premuto F7. Immediatamente ho ricevuto un avvertimento. Guardo con precisione e vedo che il risultato con le modifiche attuali non è quello che mi aspettavo. Lo modifico - è ok. Cioè, il compilatore mi ha aiutato molto con il suo messaggio.


Ma se avete un sacco di avvertimenti, scrivete il vostro codice con più attenzione. O non li modifica per una questione di principio, dimostrando alla macchina che si sbaglia?

 
A100:

Vi impedisce di farlo perché crea parentesi inutili. Ma mettere staffe extra non è impedito dai dilettanti, e la cosa principale è che tutti sarebbero felici con esso.

Dubito che sia configurabile nello studio - perché non ci sono avvertimenti extra su presunte parentesi dimenticate (almeno di default), quindi non c'è materia di configurazione

Totalmente d'accordo. Visto che ti definisci un programmatore, sii così gentile da imparare le priorità delle operazioni, almeno ricordati che esistono. Mi è stato chiesto di aggiungere un robot di recente, ma mi è stato chiesto di aggiungere init() e start() e quando ho chiesto loro quando l'hanno scritto mi hanno detto che era stato una settimana fa. Quindi, ci sono ancora "codificatori", ma per queste persone non vale la pena lasciare avvertimenti inutili.

 
Vladimir Simakov:

Sono assolutamente d'accordo. Visto che ti definisci un programmatore, sii gentile e impara le priorità di funzionamento, almeno ricordati che esistono. Mi è stato chiesto di finire di scrivere un robot di recente, ma ci sono init() e start() e quando ho chiesto loro quando l'hanno scritto mi hanno detto che era stato una settimana fa. Quindi, ci sono ancora "codificatori", ma per queste persone non vale la pena lasciare avvertimenti inutili.

La conoscenza delle priorità non ha niente a che vedere con gli avvertimenti. Scrivo codice tranquillamente e non mi definisco un programmatore.

 
A100:

Dubito che sia allestito nello studio

è disponibile nelle proprietà del progetto. avevamo una regola di ferro su uno dei nostri progetti - correggere tutti gli avvertimenti sulle versioni di rilascio, compresi alcuni paranoici W4

https://docs.microsoft.com/en-us/cpp/build/reference/compiler-option-warning-level?view=vs-2017

Mi sembra che più avvisi ci sono e meglio è, se sono in qualche modo giustificati e possono essere disattivati

 
fxsaber:

Se avete un numero enorme di avvertimenti, scrivete il codice con più attenzione. O non li correggete per una questione di principio, dimostrando che la macchina ha torto?

Uso soprattutto codice compatibile con C++ (e spesso anche un solo file). Il C++ non li ha, e le parentesi inutili, come già notato qui, rendono difficile la comprensione

Motivazione: