Domanda

Sapete come posso fare stecca ignorano dove dichiaro mio variabili?

So che la vecchia scuola c dice di dichiarare le variabili a destra alla a partire in ogni funzione, ma dal momento che io sono una persona cattiva che mi piace di dichiarare cose vicino a dove li uso. Un buon esempio è quello di mettere int i; a destra prima del for (i = 0; ...)

.

Facciamo un esempio molto semplice

#include  <stdio.h>
int main()
{
    printf("Hello splint test\n");

    int i;
    for(i=5;i>0;i--)
    {
        printf("%2d...\n",i);
    }

    return 0;
}

Qui stecca e la maggior parte vecchi compilatori C vorrebbero spostare int i; alto di una riga, o per dirla {} attorno alla dichiarazione e il ciclo for.

E ora la domanda, come faccio a disattivare questo controllo? Ma mantenere gli altri controlli che è buono?

Grazie Johan


Nota 1: Utilizzo già avvertimenti gcc (vedi sotto) come prima linea di difesa al largo, e valgrind come secondo. Ma sto pensando di aggiungere stecca alla mia lista di cose che potrebbero controllare la mia stupidità ;-) Ma questo controllo è solo fastidioso,

Gli avvertimenti gcc che uso:  -Wall -W -Wextra -Wconversion -Wshadow -Wcast-qual -Wwrite-stringhe -Werror

Nota 2: So circa i potenziali problemi di portabilità che potrebbero venire da quel cattivo comportamento. Ma sento che aumenta la leggibilità, alias non avendo bisogno di saltare su e giù per la ricerca di questo tipo off dichiarazioni è più prezioso (e questo possiamo discutere in un altro thread).


Aggiorna : Un po 'più di informazioni, ho messo il codice di cui sopra in un file chiamato main.c. Piattaforma utilizzata è di Ubuntu 8.04 e gvim come redattore, e questo è l'uscita dalla stecca quando l'eseguo:

splint +gnuextensions main.c
Splint 3.1.1 --- 03 Nov 2006

Command Line: Setting +gnuextensions redundant with current value
main.c:8:8: Parse Error. (For help on parse errors, see splint -help
                 parseerrors.)

E questo apre altre 2 domande che non ho pensare prima.

  1. "ridondante con valore corrente", quale valore attuale?

  2. Perché è un errore di analisi e non un avvertimento?


Aggiornamento: : C'è una possibilita 'di patch stecca per sostenere questo problema, Non ho provato questo, ma ancora, ma penso che sia la soluzione.

È stato utile?

Soluzione

Ecco una patch: http://www.cs.virginia.edu /pipermail/splint-discuss/attachments/20080718/52cc25f6/attachment.obj

Si dovrebbe essere in grado di alimentare che, attraverso patch di -P2 se siete nella directory stecca / src, e allora dovrebbe solo ricostruire.

Questo è da questa email: http://www.cs.virginia.edu/pipermail /splint-discuss/2008-July/001190.html

(Ci scusiamo per la spaziatura su quello.)

Troverete che alla fine, se si segue la starblue filo collegato a, ma ho pensato di passare alla fine per voi.

stecca sembra essere senza un manutentore in questo momento, purtroppo. Mi piacerebbe prendere in considerazione intensificare e fare un po 'di più se non fossi così occupato.

Jake

Altri suggerimenti

Questo discussione sulla mailing Splint lista discute la questione.

Sembra che il parser è in gran parte C89 / C90, solo la libreria sembra essere C99.

Dato che il problema è con il parser non si può farlo andare via impostando bandiere.

Non ho familiarità con la stecca, ma da loro FAQ :

  

stecca è indipendente dal vostro   compilatore. Esso controlla il codice C di serie,   secondo il C99 ISO   specifica. Splint supporta la maggior parte,   ma non tutte, le estensioni per C99   l'ANSI C. Splint supporta alcune delle   le estensioni del compilatore gcc (se   + Gnuextensions è utilizzato).

La posizione della vostra dichiarazione è perfettamente compatibile con C99, in modo forse si potrebbe considerare questo un bug in stecca. O si tratta di una delle "estensioni" non ancora supportati da stecca. In entrambi i casi si può essere interessati al tuo feedback. Non ci dovrebbe essere alcun motivo per uno strumento lint C99 compatibile per lamentarsi di dichiarazioni di variabili.

Di solito, con la stecca, se qualcosa può essere soppresso si dirà "sopprimere questo con + thisflag o -thisflag"

Si potrebbe provare a stecca + gnuextensions foo.c, che si accende (la maggior parte) GNU / estensioni GCC che stecca altrimenti mettere in discussione.

Io uso stecca quasi come spesso come io uso valgrind.

Modifica:

Come altri hanno detto, la vostra corsa nella parser (non l'analizzatore), in modo da bandiere in realtà non stanno andando per aiutare in questo caso.

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