A che cosa servono gli avvisi per i pelucchi e gli errori? [chiuso]

1

Spero che qualcuno a cui ho dato questo pensiero possa aiutarmi a capire. La maggior parte degli strumenti di controllo dello stile sembrano distinguere tra avvisi ed errori.

Per me, il punto di un errore di sfilacciamento è che un problema di stile dovrebbe essere risolto.

Nei casi in cui lo strumento non è abbastanza intelligente da vedere che può essere fatta un'eccezione, molti strumenti hanno una sintassi per ignorare / riconoscere gli errori. Anche questo ha senso.

Quali casi sono rimasti dove un avvertimento potrebbe essere di qualche utilità?

    
posta user1446 14.10.2015 - 02:37
fonte

2 risposte

3

Lint non riguarda solo il controllo dello stile.

Molti strumenti Lint eseguono analisi del codice statico. In quanto tali, possono rilevare errori nel codice che altrimenti non sarebbero rilevati. Ciò significa che puoi controllare il tuo programma per i bug prima di eseguirlo.

Il primo programma Lint era per il linguaggio C; ha rilevato cose come la divisione per zero, le variabili utilizzate prima di essere impostate e i calcoli che potrebbero sovrasfruttare. A mano a mano che lo standard della lingua migliorava e i compilatori miglioravano nel rilevare e segnalare errori, il programma Lint divenne gradualmente meno importante. Oggi c'è un programma Lint per Javascript scritto da Douglas Crockford, che è ancora importante perché Javascript è ancora una lingua giovane.

Ad ogni modo, il punto è che la maggior parte dei problemi di stile di codifica sono più che probabili avvertimenti e non errori, perché non causeranno la rottura del programma. Le cose che causeranno la rottura del tuo programma sono classificate come errori, non come avvertenze.

    
risposta data 14.10.2015 - 03:38
fonte
2

Gli errori di sfilacciamento indicano che qualcosa è rotto o si interromperà in fase di runtime. Errori del puntatore nullo garantiti, errori divisi per zero, ecc. Roba come questa che è sintatticamente legale, ma non ha senso:

int x = 5 / 0;
int y = *((int *) 0);

Gli avvertimenti devono significare "questo è rischioso, ma non è garantito che causi un errore o un'eccezione di runtime". Esempio:

bool x = true;
while (x = true) { // Oops! Should be "==" or just omit the test
  ...
}

Vengono anche in mente le conversioni implicite in C ++, così come il mix di variabili firmate e non firmate in una singola espressione. Possono causare alcuni bug molto difficili da rintracciare, ma Lint o un buon compilatore possono indicarli come avvertimenti. Non errori, perché il programmatore potrebbe effettivamente significare e non è un errore che causerà il crash del tuo programma.

    
risposta data 14.10.2015 - 03:52
fonte