lint(1) lint(1)
NAME
lint - C-Programme prüfen
SYNTAX
lint [Option...] Datei...
BESCHREIBUNG
lint ermittelt Merkmale der C-Programmdateien, die möglicherweise Feh-
ler darstellen, nicht portabel oder nutzlos sind. Auch prüft es die
Typbenutzung strenger als der Compiler. lint gibt Warnungen und Feh-
lermeldungen aus. Zu den Punkten, die geprüft werden, gehören nicht
erreichbarer Code, Schleifen, in die gesprungen wird, automatische
Variablen, die erklärt, jedoch nicht verwendet werden, und logische
Ausdrücke mit konstantem Wert. lint überprüft Funktionen, die Werte an
einigen Stellen zurückgeben und an anderen nicht, Funktionen, die mit
variierender Argumentenanzahl oder verschiedenen Argument-Typen aufge-
rufen werden, sowie Funktionen, deren Werte nicht verwendet werden
oder deren Werte zwar verwendet, jedoch nicht zurückgegeben werden.
Argumente, deren Namen mit .c enden, werden als C-Quelldateien angese-
hen. Argumente, deren Namen mit .ln enden, werden als das Ergebnis
eines früheren Aufrufs von lint verstanden, bei dem entweder die
Option -c oder -o verwendet wurde. Die .ln-Dateien sind ähnlich den
.o-(Objekt-)Dateien, die vom Kommando cc(1) erstellt werden, wenn eine
Datei .c als Eingabe verwendet wird. Vor Dateien mit anderen Zusätzen
wird gewarnt: diese Dateien werden ignoriert.
lint nimmt alle Dateien .c, .ln und llib-lx.ln (angegeben durch die
Option -l x) und verarbeitet sie in der Reihenfolge, wie sie in der
Aufrufzeile erscheinen. Standardmäßig hängt lint die Standard-C-Lint-
Bibliothek llib-lc.ln an das Ende der Dateiliste an. Bei Anwendung der
Option -c werden die Dateien .ln und llib-lx.ln ignoriert. Wird die
Option -c nicht verwendet, prüft der zweite Durchgang von lint die
Dateiliste .ln und llib-lx.ln auf gegenseitige Kompatibilität.
OPTIONEN
Die folgenden Optionen werden zur Unterdrückung bestimmter Arten von
Reklamationen benutzt:
-a Reklamationen bei Zuweisungen von long-Werten an Variablen unter-
drücken, die nicht long sind.
-b Reklamationen bei break-Anweisungen unterdrücken, die nicht
erreicht werden können.
-h Keine Heuristik-Tests durchführen, die versuchen, Fehler zu ver-
meiden, den Stil zu verbessern und den Aufwand zu reduzieren.
-m Reklamationen bei externen Symbolen unterdrücken, die als static
deklariert sein könnten.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
lint(1) lint(1)
-u Reklamationen bei Funktionen und externen Variablen unterdrücken,
die verwendet und nicht definiert oder definiert und nicht ver-
wendet wurden. Diese Option ist für das Ausführen von lint in
einer Untergruppe von Dateien eines größeren Programms geeignet.
-v Reklamationen bei unbenutzten Argumenten in Funktionen unterdrük-
ken.
-x Keine Variablen melden, auf die externe Deklarationen verweisen,
die jedoch niemals verwendet werden.
Die nachstehenden Optionen verändern das Verhalten von lint:
-l x Die lint-Bibliothek llib-lx.ln mit aufnehmen. So kann man bei-
spielsweise eine lint-Version der Arithmetik-Bibliothek llib-
lm.ln durch Einfügen von -l m in die Kommandozeile einschließen.
Mit diesem Argument wird die Standardverwendung von llib-lc.ln
nicht unterdrückt. Diese lint-Bibliotheken müssen sich im dafür
vorgesehenen Dateiverzeichnis befinden. Diese Option kann für
Verweise auf lokale lint-Bibliotheken verwendet werden und ist
nützlich bei der Entwicklung von Mehrdatei-Projekten. Die Reihen-
folge der angegebenen -l-Optionen ist signifikant, da die Biblio-
theken in dieser Reihenfolge verarbeitet werden.
-n Nicht auf Kompatibilität bzgl. der Standard-C-Lint-Bibliothek
prüfen.
-p Portabilität auf andere Dialekte von C prüfen. Gleichzeitig mit
der strengeren Prüfung bewirkt diese Option auch ein Abschneiden
aller interner Namen auf acht Zeichen und aller externen Namen
auf sechs Zeichen und einheitliche Groß- oder Kleinschreibung.
-s Nur eine einzeilige Diagnose erzeugen. lint puffert Meldungen
gelegentlich, um einen zusammenhängenden Bericht zu erzeugen.
-k Verhalten bei /*LINTED [Meldung]*/-Anweisungen ändern. Normaler-
weise unterdrückt lint Warnungen zu der Programmzeile, die dieser
Anweisungen folgt. Mit dieser Option jedoch gibt lint eine
zusätzliche Meldung aus, die den Kommentar innerhalb der Anwei-
sung enthält, anstatt die Meldung zu unterdrücken.
-y Bearbeitete Datei so behandeln, als wäre die Anweisung /*LINTLI-
BRARY*/ verwendet worden. Normalerweise wird eine lint-Bibliothek
durch die Anweisung /*LINTLIBRARY*/ erzeugt.
-F Pfadnamen der Dateien angeben. lint gibt den Dateinamen normaler-
weise ohne den Pfad an.
-c lint zum Erstellen einer Datei .ln für jede Datei .c in der Kom-
mandozeile veranlassen. Diese .ln-Dateien sind nur das Produkt
des ersten Durchgangs von lint, es wird nicht auf Kompatibilität
zwischen den Funktionen geprüft.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
lint(1) lint(1)
-o x lint erstellt eine lint-Bibliothek mit dem Namen llib-lx.ln. Die
Option -c hebt jede Angabe der Option -o auf. Die eingerichtete
lint-Bibliothek ist die Eingabe für den zweiten Durchgang von
lint. Die Option -o bewirkt lediglich, daß diese Datei in der
angegebenen lint-Bibliothek gesichert wird. Zur Erzeugung einer
llib-lx.ln ohne zusätzliche Meldungen wird die Verwendung der
Option -x vorgeschlagen. Die Option -v ist nützlich, wenn die
Quelldateien für die lint-Bibliothek nur externe Schnittstellen
sind.
-V Produktname und Version auf die Standard-Fehlerausgabe ausgeben.
-W Datei
Eine .ln-Datei nach Datei schreiben, damit sie von cflow(1) ver-
wendet werden kann.
-R Datei
Eine .ln-Datei nach Datei.lnt schreiben, damit sie von cxref(1)
verwendet werden kann.
-- Ende der Optionenliste. Die Angabe ist nötig, wenn der erste
Dateiname mit - beginnt.
lint erkennt viele cc-Optionen, wie -D, -U, -I, -L, -g, -O, -Xt, -Xa
und -Xc, wobei -g und -O ignoriert werden. Bei Verwendung anderer
Optionen wird eine Warnung ausgegeben, und sie werden ignoriert.
Durch bestimmte konventionelle Kommentare in der C-Quelle kann das
Verhalten von lint beeinflußt werden:
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
lint(1) lint(1)
/*ARGSUSED n*/
Sorgt dafür, daß lint nur die ersten n Argumente zur Verwendung
überprüft; ein fehlendes n wird als 0 gewertet. Diese Option ver-
hält sich wie die Option -v für die nächste Funktion.
/*CONSTCOND*/ oder /*CONSTANTCOND*/ oder /*CONSTANTCONDITION*/
Unterdrückt für den nächsten Ausdruck Meldungen über konstante
Operanden.
/*EMPTY*/
Unterdrückt Meldungen über eine leere Anweisung, die auf eine
if-Anweisung folgt. Diese Angabe sollte direkt nach dem Test-
Ausdruck und vor dem Semikolon stehen. Sie wird zur Verfügung
gestellt, um leere if-Anweisungen zu unterstützen, wenn eine gül-
tige else-Anweisung folgt. Damit werden Meldungen über eine fol-
gende leere else-Anweisung unterdrückt.
/*FALLTHRU*/ oder /*FALLTHROUGH*/
Unterdrückt Hinweise auf Anweisungen, die auch direkt von der
vorhergehenden Anweisung aus erreicht werden können, obwohl sie
mit einem case- oder einem default-Label versehen sind. Diese
Angabe sollte direkt vor dem Label stehen.
/*LINTLIBRARY*/
Am Anfang einer Datei unterdrückt Meldungen über unbenutzte Funk-
tionen und Funktionsargumente in dieser Datei. Das gleiche kann
auch mit den Optionen -v und -x erreicht werden.
/*LINTED [Meldung]*/
Unterdrückt alle dateiweiten Warnungen, außer solchen, die unbe-
nutzte Variablen oder Funktionen betreffen. Diese Angabe sollte
unmittelbar vor der Zeile stehen, in der die lint-Warnung auf-
trat. Die Option -k ändert die Art, in der lint diese Angabe
behandelt. Statt Meldungen zu unterdrücken, gibt lint dann eine
zusätzliche Meldung aus, sofern eine im Kommentar vorhanden ist.
Diese Angabe ist im Zusammenhang mit der Option -s bei der Ver-
wendung von nachgeschalteten Filtern sinnvoll.
/*NOTREACHED*/
Stoppt an geeigneten Stellen die Kommentare über nicht erreichba-
ren Code. Dieser Kommentar wird normalerweise unmittelbar nach
Aufrufen von Funktionen wie exit(2) verwendet.
/*PRINTFLIKE n*/
Sorgt dafür, daß lint wie gewöhnlich die ersten (n-1) Argumente
überprüft. Das nte Argument wird als Formatierungsanweisung für
printf interpretiert, um die verbleibenden Argumente zu überprü-
fen.
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
lint(1) lint(1)
/*PROTOLIB n*/
Bewirkt, daß lint Funktionsdeklarations-Prototypen wie Funktions-
definitionen behandelt, wenn n ungleich Null ist. Diese Angabe
kann nur zusammen mit /*LINTLIBRARY*/ verwendet werden. Wenn n
gleich Null ist, werden Funktions-Prototypen normal behandelt.
/*SCANFLIKE n*/
Bewirkt, daß lint wie gewöhnlich die ersten (n-1) Argumente über-
prüft. Das nte Argument wird als Formatierungsanweisung für scanf
interpretiert, um die verbleibenden Argumente zu überprüfen.
/*VARARGS n*/
Unterdrückt die übliche Prüfung auf eine veränderliche Anzahl der
Argumente in der nachfolgenden Funktionsdeklaration. Die Datenty-
pen der ersten n Argumente werden geprüft; ein fehlendes n wird
als 0 interpretiert. Der Gebrauch des Auslassungssymbols (...) in
der Definition wird für neuen oder neubearbeiteten Code vorge-
schlagen.
lint erzeugt die erste Ausgabe pro Quelldatei. Reklamationen hinsicht-
lich eingebundener Dateien werden gesammelt und nach Verarbeitung
aller Quelldateien ausgegeben, wenn -s nicht angegeben wurde. Wird die
Option -c nicht verwendet, so werden die Informationen von allen Ein-
gabedateien gesammelt und auf Übereinstimmung geprüft. Wenn Unklarheit
darüber besteht, ob eine Reklamation von einer angegebenen Quelldatei
stammt oder von einer der eingebundenen Dateien, wird an diesem Punkt
der Name der Quelldatei mit anschließendem Fragezeichen ausgegeben.
Das Verhalten der Optionen -c und -o ermöglicht eine inkrementelle
Verwendung von lint in einem Satz von C-Quelldateien. Gewöhnlich ruft
man lint einmal für jede Quelldatei mit der Option -c auf. Mit jedem
dieser Aufrufe wird eine .ln-Datei angelegt, die der .c-Datei ent-
spricht und alle Meldungen ausgibt, die genau diese Quelldatei betref-
fen. Nachdem alle Quelldateien separat durch lint bearbeitet worden
sind, wird lint erneut aufgerufen (ohne die Option -c), wobei alle
.ln-Dateien mit den benötigten Optionen -l x aufgelistet werden.
Dadurch werden alle Inkonsistenzen zwischen den Dateien ausgegeben.
Dieses Verfahren funktioniert gut mit make; es ermöglicht die Verwen-
dung von make, um nur die Quelldateien, die seit der letzten Bearbei-
tung dieser Dateien verändert worden sind, mit lint zu bearbeiten.
HINWEISE
lint ist auf den PCC C-Compiler zugeschnitten. Mit lint können aber
auch Programme überprüft werden, die mit dem C-DS C-Compiler übersetzt
werden sollen. Allerdings sind dann nicht alle ausgegebenen Warnungen
sinnvoll.
INTERNATIONALE UMGEBUNG
Die Sprache der Meldungstexte wird durch die Umgebungsvariablen
LCALL, LCMESSAGES oder LANG bestimmt.
In der Standardeinstellung verhält sich das System so, als wäre es
nicht internationalisiert, d. h. die Meldungstexte erscheinen in
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98
lint(1) lint(1)
englischer Sprache. Wenn Sie die Sprache der Meldungstexte ändern wol-
len, müssen Sie eine dieser Variablen entsprechend setzen.
Ausführliche Informationen zu den Abhängigkeiten der Umgebungsvaria-
blen und zur Internationalisierung im allgemeinen finden Sie im Hand-
buch "Leitfaden für Programmierer: Internationalisierung - Lokalisie-
rung". Zur Einstellung der Benutzerumgebung siehe auch environ(5).
DATEIEN
LIBDIR
das Dateiverzeichnis, in dem die in der Option -lx angegebenen
lint-Bibliotheken vorhanden sein müssen
LIBDIR/lint[12]
erster und zweiter Durchgang
LIBDIR/llib-lc.ln
Deklarationen für C-Bibliotheksfunktionen (Binärformat; Quelle
ist in LIBDIR/llib-lc)
LIBPATH/llib-lm.ln
Deklarationen für Arithmetik-Bibliotheks-Funktionen (Binärformat;
Quelle ist in LIBDIR/llib-lm)
TMPDIR/*lint*
temporäre Dateien
TMPDIR
gewöhnlich /var/tmp, kann jedoch durch Setzen der Umgebungsvaria-
blen TMPDIR neudefiniert werden [siehe tempnam() in tmpnam(3S)]
LIBDIR
gewöhnlich /ccs/lib
LIBPATH
gewöhnlich /usr/ccs/lib:/usr/lib
SIEHE AUCH
cc(1), cflow(1), cxref(1), lex(1), make(1), yacc(1).
Kapitel "lint" in "Leitfaden und Werkzeuge für die Programmierung mit
C".
Seite 6 Reliant UNIX 5.44 Gedruckt 11/98