Wissen Sie, wie kann ich Schienen dazu bringen, zu ignorieren, wo ich meine Variablen deklariere?Wie kann ich Schienen dazu bringen, zu ignorieren, wo ich meine Variablen deklariere?
Ich weiß, dass die alte Schule c Sie Variablen direkt am in jeder Funktion beginnt zu erklären, erzählt, aber da ich einen schlechten Mensch bin Ich mag die Dinge zu erklären, die Nähe, wo ich sie verwenden. Ein gutes Beispiel ist es, int i; direkt vor dem für (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 i bewegen; eine Zeile nach oben, oder {} um die Deklaration und die for-Schleife zu legen.
Und nun zur Frage, wie schalte ich diese Prüfung aus? Aber behalten Sie die anderen Überprüfungen, die gut sind?
Dank Johan
Anmerkung 1: Ich verwende bereits gcc Warnungen (siehe unten) als erste Zeile aus Verteidigung, und valgrind als die zweite. Aber ich denke Schiene auf meiner Liste der Dinge, über das Hinzufügen, die meine Dummheit ;-) Aber diese Prüfung steuern könnte, ist nur ärgerlich,
Die gcc Warnungen Ich verwende: -Wall -W -Wextra -Wconversion - Wshadow -Wcast-qual -Write-Strings -Werror
Hinweis 2: Ich weiß über die möglichen Portabilitätsprobleme, die von diesem schlechten Verhalten kommen könnten. Aber ich fühle, dass es die Lesbarkeit erhöht, aka nicht auf und ab springen müssen, um diese Art von Off-Deklarationen zu suchen ist wertvoller (und das können wir in einem anderen Thread diskutieren).
aktualisieren: Etwas mehr Informationen, legte 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 dies eröffnet zwei weitere Fragen, die ich nicht über vor dachte.
"redundant mit Stromwert", welcher Stromwert?
Warum ist es ein Parse Fehler und keine Warnung?
Update:: Es gibt eine posibility Schiene zu Patch ist, dieses Problem zu unterstützen, ich das aber noch nicht versucht haben, aber ich denke, es ist die Lösung.
Während Sie dabei sind, sollten Sie das int innerhalb der for-Anweisung deklarieren. – starblue
Erhalten Sie eine nervige Warnung oder einen Parserfehler? –
und es ist der Abstand zwischen "int" und "i", der die Schiene bricht? – Johan