mandato lint

Finalidad

Comprueba si hay problemas potenciales en los programas de lenguaje C y C++.

Sintaxis

lint [ A ] [ -b ] [ C ] [ C ] [ -h ] [ -lClave ] [ -n ] [ OBiblioteca ] [ -qDBCS ] [ - ] [ -t ] [ -u ] [ -v ] [ -w Clase [Clase ... ] ] [ -x ] [ -MA ] [ -NdNúmero ] [ -NlNúmero ] [ -NnNúmero ] [ -NtNúmero ] [ -Directorio ] [ -DNombre [=Definición ] ] [ -UNombre ] Archivo ...

Descripción

El mandato lint comprueba el código fuente del lenguaje C y C++ en busca de errores de codificación y sintaxis y de código ineficiente o no portable. Puede utilizar este programa para:

  • Identifique el código fuente y la incompatibilidad de biblioteca.
  • Imponer reglas de comprobación de tipos de forma más estricta que el compilador.
  • Identificar problemas potenciales con variables.
  • Identifique los problemas potenciales con las funciones.
  • Identificar problemas con el control de flujo.
  • Identifique las construcciones legales que pueden producir errores o ser ineficientes.
  • Identifique las declaraciones de variables y funciones no utilizadas.
  • Identifique código posiblemente no portátil.

    Nota: La comprobación de archivos de lenguaje C++ mediante el mandato lint requiere la presencia del paquete de compilador C Set + +.

El uso entre archivos de las funciones se comprueba para encontrar funciones que devuelven valores en algunas instancias y no en otras, funciones llamadas con distintos números o tipos de argumentos, y funciones cuyos valores no se utilizan o cuyos valores se utilizan pero no se devuelven.

El mandato lint interpreta las extensiones de nombre de archivo de la siguiente manera:

  • Los nombres de Archivo que terminan en .c son archivos de origen de lenguaje C.
  • Nombres de archivo que terminan en .C son archivos fuente de lenguaje C++.
  • Los nombres dearchivo que terminan en .ln son archivos no ASCII que el comando lint produce cuando se utiliza la bandera -c o -o.

El mandato lint le avisa de los archivos con otros sufijos y los ignora.

El mandato lint toma todos los .c, .Los archivos Cy .ln y las bibliotecas especificadas por -l los distinguen y los procesan en el orden en que aparecen en la línea de mandatos. De forma predeterminada, añade la biblioteca lint llib-lc.ln estándar al final de la lista de archivos. Sin embargo, cuando selecciona el distintivo -p , el mandato lint utiliza la biblioteca portátil llib-port.ln . De forma predeterminada, el segundo paso de lint comprueba esta lista de archivos para la compatibilidad mutua; sin embargo, si especifica el distintivo -c , los archivos .ln y llib-lx.ln se ignoran.

Los distintivos -c y -o permiten el uso incremental del mandato lint en un conjunto de archivos fuente de lenguaje C y C++. Por lo general, utilice el comando lint una vez para cada archivo fuente con el indicador -c. Cada una de estas ejecuciones genera un archivo .ln que corresponde al archivo .c y graba todos los mensajes relacionados con dicho archivo de origen. Después de ejecutar todos los archivos de origen por separado mediante el mandato lint , ejecútelo una vez más, sin el distintivo -c , listando todos los archivos .ln con los distintivos -l necesarios. Esto escribe todas las incoherencias entre archivos. Este procedimiento funciona bien con el mandato make , lo que le permite ejecutar el mandato lint sólo en los archivos de origen modificados desde la última vez que se comprobó el conjunto de archivos de origen.

Los símbolos de preprocesador lint y LINT están definidos para permitir que se modifique o elimine determinado código cuestionable para el mandato lint . Por lo tanto, los símbolos lint y LINT deben considerarse como una palabra reservada para todo el código que está previsto que compruebe lint.

Los comentarios siguientes en un programa fuente de lenguaje C y C++ cambian la forma en que funciona el mandato lint al comprobar el programa fuente:

Elemento Descripción
/*NOTREACHED*/ Suprime los comentarios sobre el código inalcanzable.
/*VARARGSNúmero*/ Suprime la comprobación de la siguiente declaración de función de estilo antiguo para diversos números de argumentos, pero comprueba el tipo de datos de los primeros argumentos Número . Si no incluye un valor para Número, el mandato lint no comprueba ningún argumento (Número= 0). Los prototipos de función ANSI deben utilizar los puntos suspensivos para indicar parámetros no especificados en lugar de este mecanismo de comentario.
/*ARGSUSED*/ Suprime avisos sobre parámetros de función no utilizados en la definición de función.
/*LINTLIBRARY*/ Si coloca este comentario al principio de un archivo, el mandato lint no identifica las funciones y parámetros de función no utilizados en el archivo. Se utiliza al ejecutar el mandato lint en bibliotecas.
/*NOTUSED*/ Suprime avisos sobre símbolos externos no utilizados, funciones y parámetros de función en el archivo que empieza en su punto de aparición. Este es un superconjunto de la directiva de comentario /*LINTLIBRARY*/ , pero también se aplica a los símbolos externos. Es útil para suprimir avisos sobre prototipos de función no utilizados y otras declaraciones de objeto externo.
/*NOTDEFINED*/ Suprime los avisos sobre las funciones y símbolos externos utilizados, pero no definidos, en el archivo que empieza en su punto de aparición.
/*LINTSTDLIB*/ Permite que una biblioteca de comprobación de prototipos estándar se forme a partir de archivos de cabecera haciendo que las declaraciones de prototipo de función aparezcan como definiciones de función. Esta directiva activa implícitamente las directivas de comentario /*NOTUSED*/ y /*LINTLIBRARY*/ para reducir los niveles de ruido de aviso.

Los mensajes de aviso del mandato lint proporcionan el nombre de archivo y el número de línea. A medida que cada archivo pasa por la primera pasada, se notifican los avisos para cada archivo y cada número de línea.

Si no ha especificado el distintivo -c , el mandato lint recopila información recopilada de todos los archivos de entrada y comprueba su coherencia. En este punto, si no está claro si un mensaje proviene de un archivo de origen determinado o de uno de sus archivos incluidos, el mandato lint muestra el nombre del archivo de origen seguido de un signo de interrogación.

Los programas ANSI que incluyan muchos archivos de cabecera estándar pueden desear establecer la bandera -wD para reducir la cantidad de advertencias sobre prototipos no utilizados, y la bandera -n para desactivar la comprobación contra la biblioteca estándar ANSI. Para programas no ANSI, es aconsejable especificar el distintivo -wk para reducir la cantidad de avisos relativos a la ausencia de prototipos de función.

Distintivos

Elemento Descripción
-a Suprime mensajes sobre asignaciones de valores largos a variables que no son largas.
-b Suprime mensajes sobre sentencias de interrupción inalcanzables.
-c Hace que el mandato lint genere un archivo .ln para cada archivo .c en la línea de mandatos. Estos archivos .ln son el producto del primer paso del mandato lint únicamente y no se comprueban para la compatibilidad entre funciones.
-C Especifica que se utilicen las bibliotecas C++ (en el directorio /usr/lpp//xlC/lib ).
-h No trata de detectar errores, estilo inadecuado, o reducir el desperdicio.
-lClave Incluye la biblioteca lint llib-lKey.ln adicional. Puede incluir una versión de lint de la biblioteca matemática llib-lm.ln especificando -lm en la línea de mandatos o la biblioteca llib-ldos.ln especificando el distintivo -ldos en la línea de mandatos. Utilice este distintivo para incluir bibliotecas lint locales al comprobar archivos que forman parte de un proyecto que tiene un gran número de archivos. Este distintivo no impide que el mandato lint utilice la biblioteca llib-lc.ln . La biblioteca lint debe estar en el directorio /usr/ccs/lib .
-n Suprime la comprobación de compatibilidad con las bibliotecas de lint estándar o portátil. Esto se aplica a las bibliotecas de modalidad ampliada y ANSI.
-oBiblioteca Hace que el mandato lint cree la biblioteca llib-lLibrary.ln . El distintivo -c anula cualquier uso del distintivo -o . La biblioteca lint producida es la entrada que se proporciona a la segunda pasada del mandato lint . El distintivo -o simplemente hace que este archivo se guarde en la biblioteca lint con nombre. Para producir un llib-lBiblioteca.ln sin mensajes extraños, utilice el distintivo -x . El distintivo -v es útil si los archivos de origen para la biblioteca lint son sólo interfaces externas (por ejemplo, la forma en que se escribe el archivo llib-lc ). Estos valores de distintivo también están disponibles mediante el uso de líneas de comentario de mandato lint .
-p Comprueba la portabilidad a otros dialectos de lenguaje C.
-T Comprueba si hay asignaciones problemáticas al portar de 32 a 64 bits. Sólo se comprueban los casos siguientes:
  • todas las operaciones de desplazamiento/máscara se marcan porque algunas operaciones que funcionan bien en 32 bits pueden causar problemas en 64 bits.
  • se proporcionan avisos para el siguiente tipo de asignaciones.
    int = long
    int = ptr
-u Suprime mensajes sobre funciones y variables externas que se utilizan y no se definen o se definen y no se utilizan. Utilice este distintivo para ejecutar el mandato lint en un subconjunto de archivos de un programa más grande.
-v Suprime mensajes sobre parámetros de función que no se utilizan.
-w Clase [Clase ...] Controla la notificación de las clases de aviso. Todas las clases de aviso están activas de forma predeterminada, pero se pueden desactivar individualmente incluyendo la opción adecuada como parte del argumento Clase . Las opciones individuales se listan como:
<
Características no ANSI.
c
Comparaciones con valores sin signo.
d
Coherencia de declaración.
h
Quejas heurísticas.
k
Se utiliza para el código fuente de tipo K + R.
l
Asignación de valores largos a variables que no son largas.
n
Código de efecto nulo.
o
Orden de evaluación desconocido.
p
Diversos problemas de portabilidad.
:NONE.
Devolver coherencia de sentencia.
s
Comprobaciones de capacidad de almacenamiento.
u
Uso adecuado de variables y funciones.
A
Desactive todos los avisos.
C
Constantes que se producen en condicionales.
S
Las declaraciones externas nunca se utilizan.
O
Características obsoletas.
C
Presencia de prototipo de función.
R
Detección de código inalcanzable.
-x Suprime mensajes sobre variables que tienen declaraciones externas pero que nunca se utilizan.
-MA Aplica las reglas estándar del lenguaje ANSI C. La modalidad predeterminada es igual a la modalidad C ampliada. La modalidad ANSI añade los prototipos de función de biblioteca ANSI estándar en lugar de la biblioteca de líneas C de modalidad ampliada por omisión. La modalidad ANSI impone una referencia de objeto entre archivos más estricta y proporciona comprobaciones de enlace de definición.
-NdNúmero Cambia el tamaño de la tabla de dimensiones a Número. El valor predeterminado de Número es 2000.
-NlNúmero Cambia el número de nodos de tipo a Número. El valor predeterminado de Número es 8000.
-NnNúmero Aumenta el tamaño de la tabla de símbolos a Número. El valor predeterminado de Número es 1500.
-NtNúmero Cambia el número de nodos de árbol a Número. El valor predeterminado de Número es 1000.

Además, el mandato lint reconoce los distintivos siguientes del mandato cpp (preprocesador de macros):

Elemento Descripción
-IDirectorio Añade el Directorio a la lista de directorios en los que el mandato lint busca los archivos #include .
-DNombre[=Definición] Define el Nombre, como si fuera por el archivo #define . El valor predeterminado de Definición es el valor de 1.
-qDBCS Establece la modalidad de varios bytes especificada por el entorno local actual.
-UNombre Elimina cualquier definición inicial del Nombre, donde el Nombre es un símbolo reservado predefinido por el preprocesador en particular.

Estado de salida

Este mandato devuelve los siguientes valores de salida:

Elemento Descripción
0 Finalización satisfactoria.
>0 Se ha producido un error.

Ejemplos

  1. Para comprobar si hay errores en un programa C, entre:
    lint command.c
  2. Para suprimir algunos de los mensajes, especifique:
    lint -v -x program.c
    Esto compruebaprogram.c, pero no muestra mensajes de error sobre parámetros de función no utilizados (-v) o externos no utilizados (-x).
  3. Para comprobar el programa en una biblioteca lint adicional, entre:
    lint -lsubs program.c
    Esto compruebaprogram.cen la biblioteca lint /usr/ccs/lib/llib-lc.ln estándar y en la biblioteca /usr/lib/llib-lsubs.ln .
  4. Para comprobar la biblioteca portátil y una biblioteca adicional, entre:
    lint -lsubs -p program.c
    Esto compruebaprogram.cen la biblioteca de lint portátil /usr/ccs/lib/llib-port.ln y en la biblioteca de lint /usr/lib/llib-lsubs.ln .
  5. Para comprobar sólo una biblioteca no estándar, especifique:
    lint -lsubs -n program.c
    Esto compruebaprogram.csólo en /usr/lib/llib-lsubs.ln.

Archivos

Elemento Descripción
/usr/lib/lint[12} Programas
/usr/ccs/lib/llib-lansi Declaraciones para funciones ANSI estándar (fuente)
/usr/ccs/lib/llib-lansi.ln Declaraciones para funciones ANSI estándar (formato binario)
/usr/ccs/lib/llib-lc Declaraciones para funciones estándar (fuente)
/usr/ccs/lib/llib-lc.ln Declaraciones para funciones estándar (formato binario)
/usr/ccs/lib/llib-lcrses Declaraciones para funciones curses (origen)
/usr/ccs/lib/llib-lcrses.ln Declaraciones para funciones curses (formato binario)
/usr/ccs/lib/llib-lm Declaraciones para funciones matemáticas estándar (fuente)
/usr/ccs/lib/llib-lm.ln Declaraciones para funciones matemáticas estándar (formato binario)
/usr/ccs/lib/llib-port Declaraciones para funciones portátiles (fuente)
/usr/ccs/lib/llib-port.ln Declaraciones para funciones portátiles (formato binario)
/usr/lpp//xlC/lib Directorio que contiene bibliotecas C++
/var/tmp/*lint* Archivos temporales