Domanda

Ho avuto un brutto errore di battitura che ha sprecato il mio tempo e il tempo del mio collega, era qualcosa del genere:

for (i = 0; i < blah; i++); // <- I had a semi-colon here, that's the bug!
{
  // Some awesome logic here
}

Prima di tutto, è molto imbarazzante, seconda cosa, non dovrei mai ripeterlo. Sono relativamente nuovo in C. In Java, immagino di poter usare FindBugs per rilevare errori come questi, quali strumento dovrei usare per il codice C? Lint?

È stato utile?

Soluzione

Sì, PC-Lint è probabilmente lo strumento migliore disponibile.

Altri suggerimenti

Oltre a Suggerimento PC-Lint di Lykathea , puoi anche ottenere una migliore (o almeno più) diagnostica se aumenti il ??livello di avviso del compilatore. Qualcosa come / W4 o -Wall

Anche se non sono sicuro che il tuo problema specifico sarebbe stato risolto con questo (MS VC non sembra segnalarlo anche con tutti gli avvisi abilitati). Penso che sia perché non è un linguaggio insolito che i cicli for siano vuoti quando il lavoro viene svolto come effetti collaterali delle espressioni di controllo del loop.

Alcune cose che mi hanno salvato in passato, dalla cima della mia testa:

  • Utilizzare se (3 == bla) anziché (bla == 3) , perché se si scrive male e si digita (3 = bla) il compilatore si lamenterà.

  • Utilizza l'opzione tutti gli avvisi . Il compilatore dovrebbe avvisarti di dichiarazioni vuote del genere.

  • Usa asserzioni quando puoi e programma in modo difensivo. Sforzati di far fallire presto il tuo programma, vedrai i punti deboli in questo modo.

  • Non tentare di eludere le protezioni messe in atto dal compilatore o dal sistema operativo. Sono lì anche per la tua facilità di programmazione.

Vorrei iniziare con le informazioni su splint e gdb . Se hai bisogno di più avanzati, utilizza questi due strumenti. Ma sono un buon inizio.

GCC ha la maggior parte delle funzionalità integrate da Lint tramite l'avviso bandiere .

Qualsiasi buon ambiente di programmazione della GUI ("IDE" - Ambiente di sviluppo integrato) come Eclipse genererebbe un avviso in un caso del genere.

Un buon evidenziatore della sintassi renderà alcuni casi come questo più visibili.

Suggerirei di vedere se hai la possibilità di applicare gli standard MISRA . Sono stati scritti con grande attenzione e molte regole semplici da controllare per un compilatore. Ad esempio, una regola che utilizzo richiede che tutti i comandi NOP abbiano una propria riga. Questo significa che quando metti un; alla fine di un'istruzione loop, verrà visualizzato un errore che indica che non si trova sulla propria riga.

QA & # 183; C di Programming Research è un altro buon strumento di analisi statica per C.

In questa (vecchia) versione di Come spararti Nel foot e in molte altre versioni sul Web, C è sempre la lingua che consente la procedura più semplice. Quando si programma in C , è necessario ricordare questo e fare attenzione. Se desideri protezione, scegli un'altra lingua.

Questo detto è attribuito a Bjarne Stroustrup (C ++) stesso. Per (mis) citare:

  

" C ti consente di spararti facilmente nel piede "

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top