Frage

Wissen Sie, wie kann ich machen Schiene ignorieren, wo ich meine Variablen zu deklarieren?

Ich weiß, dass die alte Schule c Sie Variablen direkt an das erklären, sagt in jeder Funktion beginnen, aber da ich ein schlechter Mensch bin ich mag die Dinge zu erklären, der Nähe, wo ich sie verwenden. Ein gutes Beispiel ist int i zu setzen; direkt vor der for (i = 0; ...)

.

Nehmen wir ein ganz einfaches Beispiel

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

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

    return 0;
}

Hier Schiene und die meisten alten c-Compiler möchte int bewegen i; Eine Linie, oder zu setzen {} um die Erklärung und die for-Schleife.

Und nun die Frage, wie ich diese Prüfung schalten Sie? Aber halten die anderen Kontrollen, die gut ist?

Danke Johan


Anmerkung 1: Ich habe bereits gcc Warnungen verwenden (siehe unten) als erste Zeile aus Verteidigung, und valgrind als die zweite. Aber ich denke, über das Hinzufügen von Schiene zu meiner Liste der Dinge, die meine Dummheit kontrollieren konnten ;-) Aber diese Prüfung ist nur ärgerlich,

Die gcc Warnungen ich verwenden:  -Wall -W -Wextra -Wconversion -Wshadow -Wcast-qual -Wwrite-strings Werror

Hinweis 2: Ich weiß, über die mögliche Portabilität Probleme, die von diesem schlechten Verhalten kommen könnten. Aber ich fühle, dass es die Lesbarkeit erhöht, auch bekannt als nicht aufspringen benötigen und unten für diese Art aus Erklärungen zu suchen, ist mehr wert (und das können wir in einem anderen Thread diskutieren).


Aktualisieren : Etwas mehr Informationen, lege ich den obigen Code in einer Datei namens main.c Plattform verwendet wird, ist Ubuntu 8.04 und gvim als Redakteur, und dies ist die Ausgabe von Schiene, wenn ich es laufen:

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.)

Und das eröffnet zwei weitere Fragen, die ich nicht vorher dachte.

  1. "redundant mit aktuellem Wert", was für aktuellen Wert?

  2. Warum ist es ein Parse-Fehler und eine Warnung?


Update: : Es gibt ein posibility Schiene zu flicken, dieses Problem zu unterstützen, Ich habe nicht versucht, aber noch nicht, aber ich denke, dass es die Lösung ist.

War es hilfreich?

Lösung

Hier ist ein Patch: http://www.cs.virginia.edu /pipermail/splint-discuss/attachments/20080718/52cc25f6/attachment.obj

Es sollte möglich sein, dass durch Patch -p2 zu füttern, wenn Sie in die Schiene / src Verzeichnis sind, und dann sollte es nur wieder aufzubauen.

Das ist von dieser E-Mail: http://www.cs.virginia.edu/pipermail /splint-discuss/2008-July/001190.html

(Leider über den Abstand auf das.)

Sie werden feststellen, dass schließlich finden, wenn Sie den Thread starblue verknüpft, folgen, aber ich dachte, dass ich für Sie bis zum Ende springen würde.

Splint scheint jetzt ohne Betreuer zu sein, leider. Ich würde prüfen, zu intensivieren und etwas mehr tun, wenn ich nicht so beschäftigt waren.

Jake

Andere Tipps

dieses Thema auf dem Splint Mailing Liste bespricht das Problem.

Es scheint, dass der Parser ist meist C89 / C90, nur die Bibliothek scheint C99 zu sein.

Da das Problem mit dem Parser ist, können Sie nicht durch das Setzen von Flags weggehen.

Ich bin nicht vertraut mit Schiene, sondern von ihrer FAQ :

  

Splint ist unabhängig von Ihrem   Compiler. Es prüft Standard-C-Code,   nach der ISO-C99   Spezifikation. Splint unterstützt die meisten,   aber nicht alle, die C99-Erweiterungen   das ANSI C. Splint unterstützt einig   die gcc-Compiler-Erweiterungen (falls   + Gnuextensions verwendet wird).

Die Position Ihrer Erklärung ist vollkommen konform unter C99, so vielleicht könnten Sie dies ein Fehler in Schiene betrachten. Oder es ist eine der „Erweiterungen“ noch nicht von Schiene unterstützt. So oder so können sie in Ihrem Feedback interessiert. Es sollte kein Grund für ein C99-kompatibele lint Werkzeug über Variablendeklarationen zu beschweren.

Normalerweise mit Schiene, wenn etwas unterdrückt werden kann, es wird sagen: „unterdrücken diese mit + thisflag oder -thisflag“

Sie könnten versuchen, + Schiene gnuextensions foo.c, die einschaltet (die meisten) GNU / GCC-Erweiterungen, die mit sonst zu nehmen schienen Ausgabe.

Ich benutze Schiene fast so oft wie ich valgrind verwenden.

Edit:

Wie schon andere gesagt haben, ist Ihr in den Parser ausgeführt wird (nicht der Analysator), so Flaggen wirklich in diesem Fall nicht helfen werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top