Befehl "lint"
Zweck
Überprüft Programme in den Programmiersprachen C und C++ auf potenzielle Probleme.
Syntax
Linte [ -a ] [ -b ] [ -c ] [ -C ] [ -h ] [ -lSchlüssel ] [ -n ] [ -oBibliothek ] [ -qDBCS ] [ -p ] [ -t. ] [ -u ] [ -v ] [ -w Klasse [Klasse ... ] ] [ -x ] [ -MA ] [ -NdZahl ] [ -NLZahl ] [ -NZahl ] [ -NtZahl ] [ -IVerzeichnis ] [ -DName [=Definition ] ] [ -UName ] Datei ...
Beschreibung
Der Befehl lint überprüft Quellcode in den Programmiersprachen C und C ++ auf Codierungs- und Syntaxfehler und auf ineffizienten oder nicht portierbaren Code. Sie können dieses Programm für folgende Zwecke verwenden:
- Identifizieren Sie die Inkompatibilität von Quellcode und Bibliothek.
- Erzwingen Sie Regeln für die Typüberprüfung strikter als der Compiler.
- Identifizieren Sie potenzielle Probleme mit Variablen.
- Identifizieren Sie potenzielle Probleme mit Funktionen.
- Identifizieren Sie Probleme mit der Ablaufsteuerung.
- Identifizieren Sie Rechtskonstruktionen, die Fehler verursachen oder ineffizient sein können.
- Identifizieren Sie nicht verwendete Variablen-und Funktionsdeklarationen.
- Identifizieren Sie möglicherweise nicht portierbaren Code.
Anmerkung: Die Überprüfung von Dateien in der Programmiersprache C++ mit dem Befehl lint setzt das Vorhandensein des Compilerpakets für C/C ++ voraus.
Die Verwendung von Funktionen zwischen Dateien wird überprüft, um Funktionen zu finden, die in manchen Fällen Werte zurückgeben, nicht aber Funktionen, die mit unterschiedlichen Nummern oder Typen von Argumenten aufgerufen werden, und Funktionen, deren Werte nicht verwendet werden oder deren Werte verwendet, aber nicht zurückgegeben werden.
Der Befehl lint interpretiert Dateinamenerweiterungen wie folgt:
- Dateinamen , die auf .c enden, sind Quellendateien in der Programmiersprache C.
- Dateinamen , die auf enden.C sind Quellendateien in der Programmiersprache C + +.
- Dateinamen, die auf .ln enden, sind Nicht-ASCII-Dateien, die der Befehl lint erzeugt, wenn entweder das Flag -c oder das Flag -o verwendet wird.
Der Befehl lint gibt Warnungen zu Dateien mit anderen Suffixen aus und ignoriert sie.
Die Befehl lint verwendet alle .c-, .C- und .ln-Dateien sowie die mit dem Flag -l angegebenen Bibliotheken und verarbeitet sie in der Reihenfolge, in der sie in der Befehlszeile angegeben sind. Standardmäßig wird am Ende der Dateiliste die lint-Standardbibliothek llib-lc.ln hinzugefügt. Wenn Sie jedoch das Flag -p angeben, verwendet der Befehl lint die portierbare Bibliothek llib-port.ln. Standardmäßig wird diese Dateiliste im zweiten Durchlauf von lint auf gegenseitige Kompatibilität überprüft. Wenn Sie jedoch das Flag -c angeben, werden die Dateien .ln- und llib-lx.ln ignoriert.
Die Flags -c und -o ermöglichen die inkrementelle Verwendung des Befehls lint für eine Reihe von C- und C++-Quellendateien. Im Allgemeinen verwenden Sie den Befehl lint einmal für jede mit dem Flag -c angegebene Quellendatei. In jedem dieser Durchläufe wird eine Datei .ln erzeugt, die der Datei .c entspricht, und es werden alle Nachrichten zu dieser Quellendatei ausgegeben. Nachdem Sie alle Quellendateien separat mit dem Befehl lint ausgeführt haben, führen Sie ihn ein weiteres Mal ohne das Flag -c aus, indem Sie alle .ln-Dateien mit den erforderlichen Flags -l auflisten. Dieser Befehl gibt alle Inkonsistenzen zwischen Dateien aus. Diese Prozedur funktioniert gut mit dem Befehl make, weil sie ihm ermöglicht, den Befehl lint nur für die Quellendateien auszuführen, die seit der letzten Überprüfung der Quelltextdateien geändert wurden.
Die lint- und LINT-Vorprozessorsymbole werden definiert, um die Änderung bzw. das Entfernen fraglichen Codes für den Befehl lint zu ermöglichen. Sie können sich die lint- und LINT-Symbole somit als reservierte Wörter für jeden Code vorstellen, der mit lint geprüft werden soll.
Die folgenden Kommentare in einem C- und C++-Quellenprogramm ändern das Verhalten des Befehls lint bei der Überprüfung des Quellenprogramms:
| Element | Beschreibung |
|---|---|
| /*NOTREACHED*/ | Unterdrückt Kommentare zu nicht adressierbarem Code. |
| /*VARARGSZahl*/ | Unterdrückt die Überprüfung der folgenden alten Funktionsdeklarationen für eine variable Anzahl von Argumenten, überprüft jedoch den Datentyp der ersten Anzahl Argumente. Wenn Sie keinen Wert für Anzahl angeben, überprüft der Befehl lint keine Argumente ( Anzahl=0). Die ANSI-Funktionsprototypen müssen die Ellipsen anstelle dieses Kommentarmechanismus verwenden, um nicht spezifizierte Parameter anzuzeigen. |
| /*ARGSUSED*/ | Unterdrückt Warnungen zu Funktionsparametern, die nicht in der Funktionsdefinition verwendet werden. |
| /*LINTBIBLIOTHEK*/ | Wenn Sie diesen Kommentar am Anfang einer Datei platzieren, identifiziert der Befehl lint nicht verwendete Funktionen und Funktionsparameter in der Datei nicht. Dieser Kommentar wird verwendet, wenn der Befehl lint für Bibliotheken ausgeführt wird. |
| /*NOTUSED*/ | Unterdrückt Warnungen zu nicht verwendeten externen Symbolen, Funktionen und Funktionsparametern in der Datei ab der Stelle, an der sie vorkommen. Diese Anweisung ist ein Superset der Kommentaranweisung /*LINTLIBRARY*/, gilt aber auch für externe Symbole. Sie ist hilfreich, um Warnungen zu nicht verwendeten Funktionsprototypen und anderen externen Objektdeklarationen zu unterdrücken. |
| /*NOTDEFINED*/ | Unterdrückt Warnungen zu verwendeten, aber nicht definierten externen Symbole und Funktionen in der Datei ab der Stelle, an der sie vorkommen. |
| /*LINTSTDLIB*/ | Ermöglicht die Erstellung einer Standardprototypprüfbibliothek aus Headerdateien, indem die Funktionsprototypdeklarationen als Funktionsdefinitionen angezeigt werden. Diese Anweisung aktiviert implizit die Kommentaranweisungen /*NOTUSED*/ und /*LINTLIBRARY*/, um den Umfang der Warnungen zu reduzieren. |
Die Warnungen des Befehls lint enthalten den Dateinamen und die Zeilennummer. Im ersten Durchlauf für jede Datei werden Warnungen zu jeder Datei und jeder Zeilennummer berichtet.
Wenn Sie das Flag -c nicht angegeben haben, erfasst der Befehl lint Informationen aus allen Eingabedateien und prüft diese auf Konsistenz. Wenn an dieser Stelle nicht klar ist, ob eine Nachricht aus einer bestimmten Quellendatei oder einer der enthaltenen Dateien stammt, zeigt der Befehl lint den Namen der Quellendatei gefolgt von einem Fragezeichen an.
Für ANSI-Programme, die viele Standardheaderdateien enthalten, kann das Flag -wD- gesetzt werden, um die Anzahl der Warnungen zu nicht verwendeten Prototypen zu reduzieren, und das Flag -n, um um die Prüfung anhand der ANSI-Standardbibliothek zu inaktivieren. Für Nicht-ANSI-Programme empfiehlt es sich, das Flag -wk anzugeben, um die Anzahl der Warnungen zum Fehlen von Funktionsprototypen zu reduzieren.
Flags
| Element | Beschreibung |
|---|---|
| -A | Unterdrückt Nachrichten zu Zuordnungen langer Werte zu Variablen, die nicht den Datentyp "long" haben. |
| -b | Unterdrückt Nachrichten zu nicht erreichbaren Unterbrechungsanweisungen. |
| -c | Bewirkt, dass der Befehl lint eine .ln-Datei für jede .c-Datei in der Befehlszeile erzeugt. Diese .ln-Dateien sind nur das Produkt des ersten Durchlaufs des Befehls lint und wurden nicht auf die Kompatibilität der Funktionen überprüft. |
| -C | Gibt an, dass die C++-Bibliotheken verwendet werden sollen (im Verzeichnis /usr/lpp//xlC/lib). |
| -H | Es wird nicht versucht, Programmfehler und falsche Stile zu erkennen oder den Umfang der Warnungen zu reduzieren. |
| -lSchlüssel | Enthält die zusätzliche lint-Bibliothek llib-lSchlüssel.ln. Mit dem Flag -lm können Sie in der Befehlszeile eine lint-Version der mathematischen Bibliothek llib-lm.ln und mit dem Flag -ldos die Bibliothek llib-ldos.ln einschließen. Verwenden Sie dieses Flag, um lokale lint-Bibliotheken einzuschließen, wenn Sie Dateien prüfen, die zu einem Projekt mit sehr vielen Dateien gehören. Dieses Flag verhindert nicht, dass der Befehl lint die Bibliothek llib-lc.ln verwendet. Die lint-Bibliothek muss sich im Verzeichnis /usr/ccs/lib befinden. |
| -N | Unterdrückt die Prüfung auf Kompatibilität mit der Standardbibliothek oder mit den portierbaren lint-Bibliotheken. Dies gilt sowohl für die ANSI- als auch für die erweiterten Modusbibliotheken. |
| -oBibliothek | Bewirkt, dass der Befehl lint die lint-Bibliothek llib-lBibliothek.ln erstellt. Das Flag -c macht jegliche Verwendung des Flags -o ungültig. Die erzeugte lint-Bibliothek ist die Eingabe für den zweiten Durchlauf des Befehls lint. Das Flag -o bewirkt lediglich, dass diese Datei in der benannten lint-Bibliothek gespeichert wird. Verwenden Sie das Flag -x , um eine llib-lBibliothek.ln ohne fremde Nachrichten zu erzeugen. Das Flag -v ist hilfreich, wenn die Quellendateien für die lint-Bibliothek nur externe Schnittstellen sind (z. B. die Art und Weise, wie die llib-lc-Datei geschrieben wird). Diese Flageinstellungen sind über die Kommentarzeilen des Befehls lint verfügbar. |
| -p | Überprüft die Portierbarkeit auf andere Dialekte der Programmiersprache C. |
| -T | Sucht bei der Portierung von 32 auf 64 Bit nach problematischen Zuweisungen. Es werden nur die folgenden Fälle überprüft:
|
| -u | Unterdrückt Nachrichten über Funktionen und externe Variablen, die entweder verwendet und nicht definiert oder definiert und nicht verwendet werden. Verwenden Sie dieses Flag, um den Befehl lint für einen Teil der Dateien eines größeren Programms auszuführen. |
| -v | Unterdrückt Nachrichten über Funktionsparameter, die nicht verwendet werden. |
| -w Klasse [Klasse ...] | Steuert die gemeldeten Warnklassen. Standardmäßig sind alle Warnklassen aktiviert, aber die Klassen können einzeln inaktiviert werden, indem die entsprechende Option im Argument Klasse angegeben wird. Die einzelnen Optionen werden wie folgt aufgelistet:
|
| -x | Unterdrückt Nachrichten zu Variablen, die externe Deklarationen haben, aber nie verwendet werden. |
| -MA | Erzwingt die ANSI C-Sprachstandardregeln. Der Standardmodus entspricht dem erweiterten C-Modus. Der ANSI-Modus stellt die standardmäßigen ANSI-Bibliotheksfunktionsprototypen anstelle der standardmäßigen C-Stilbibliothek im erweiterten Modus voran. Der ANSI-Modus erzwingt eine strengere Interfile-Objektreferenz und bietet Definitionsverknüpfungsprüfungen. |
| -NdZahl | Ändert die Größe der Dimensionstabelle in die angegebene Zahl. Der Standardwert für Zahl ist 2000. |
| -NlZahl | Ändert die Anzahl der Typknoten in die angegebene Zahl. Der Standardwert für Zahl ist 8000. |
| -NnZahl | Erhöht die Größe der Symboltabelle auf Anzahl. Der Standardwert für Zahl ist 1500. |
| -NtZahl | Ändert die Anzahl der Baumknoten in die angegebene Zahl. Der Standardwert für Zahl ist 1000. |
Darüber hinaus erkennt der Befehl lint die folgenden Flags des Befehls cpp (Makrovorprozessor):
| Element | Beschreibung |
|---|---|
| -IVerzeichnis | Fügt das angegebene Verzeichnis der Liste der Verzeichnisse hinzu, in denen der Befehl lint nach den #include-Dateien sucht. |
| -DName[=Definition] | Definiert den Namen wie mit der #define-Datei. Der Standardwert für Definition ist 1. |
| -qDBCS | Legt den durch die aktuelle Ländereinstellung angegebenen Mehrbytemodus fest. |
| -UName | Entfernt alle Anfangsdefinitionen von Name, wobei der Name ein reserviertes Symbol ist, das vom jeweiligen Vorprozessor vordefiniert wird. |
Exitstatus
Dieser Befehl gibt die folgenden Exitwerte zurück:
| Element | Beschreibung |
|---|---|
| 0 | Erfolgreiche Ausführung. |
| >0 | Es ist ein Fehler aufgetreten. |
Beispiele
- Geben Sie Folgendes ein, um ein C-Programm auf Fehler zu überprüfen:
lint command.c - Geben Sie Folgendes ein, um einige Nachrichten zu unterdrücken:
Diese Prüfungprogram.c, zeigt jedoch keine Fehlernachrichten zu nicht verwendeten Funktionsparametern (-v) oder nicht verwendeten externen Komponenten (-x) an.lint -v -x program.c - Geben Sie Folgendes ein, um das Programm anhand einer zusätzlichen Lintbibliothek zu überprüfen:
Diese Prüfungprogram.cfür die Standardbibliothek lint von /usr/ccs/lib/llib-lc.ln und die Standardbibliothek lint von /usr/lib/llib-lsubs.ln .lint -lsubs program.c - Geben Sie Folgendes ein, um die portierbare Bibliothek und eine zusätzliche Bibliothek zu überprüfen:
Diese Prüfungprogram.cfür die portierbare lint-Bibliothek /usr/ccs/lib/llib-port.ln und die lint-Bibliothek /usr/lib/llib-lsubs.ln .lint -lsubs -p program.c - Geben Sie Folgendes ein, um nur eine vom Standard abweichende Bibliothek abzugleichen:
Diese Prüfungprogram.cnur für /usr/lib/llib-lsubs.ln.lint -lsubs -n program.c
Dateien
| Element | Beschreibung |
|---|---|
| /usr/lib/lint[12} | Programme |
| /usr/ccs/lib/llib-lansi | Deklarationen für Standard-ANSI-Funktionen (Quelle) |
| /usr/ccs/lib/llib-lansi.ln | Deklarationen für Standard-ANSI-Funktionen (Binärformat) |
| /usr/ccs/lib/llib-lc | Deklarationen für Standardfunktionen (Quelle) |
| /usr/ccs/lib/llib-lc.ln | Deklarationen für Standardfunktionen (Binärformat) |
| /usr/ccs/lib/llib-lcrses | Deklarationen für Curses-Funktionen (Quelle) |
| /usr/ccs/lib/llib-lcrses.ln | Deklarationen für Curses-Funktionen (Binärformat) |
| /usr/ccs/lib/llib-lm | Deklarationen für mathematische Standardfunktionen (Quelle) |
| /usr/ccs/lib/llib-lm.ln | Deklarationen für mathematische Standardfunktionen (Binärformat) |
| /usr/ccs/lib/llib-port | Deklarationen für portierbare Funktionen (Quelle) |
| /usr/ccs/lib/llib-port.ln | Deklarationen für portierbare Funktionen (Binärformat) |
| /usr/lpp//xlC/lib | Verzeichnis mit den C++-Bibliotheken |
| /var/tmp/*lint* | Temporäre Dateien |