Pregunta

¿Sabes cómo puedo hacer que splint ignore dónde declaro mis variables?

Sé que la vieja escuela C te dice que declares variables al principio de cada función, pero como soy una mala persona, me gusta declarar cosas cercanas a donde las uso.Un buen ejemplo es poner int i;justo antes de for(i=0;...).

Tomemos un ejemplo muy simple.

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

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

    return 0;
}

Aquí a splint y a la mayoría de los compiladores de c antiguos les gustaría pasar a int i;en una línea, o para poner {} alrededor de la declaración y el bucle for.

Y ahora a la pregunta, ¿cómo desactivo este check?¿Pero mantener los otros cheques que es bueno?

Gracias Johan


Nota 1:Ya uso advertencias de GCC (ver más abajo) como una primera línea fuera de defensa, y Valgrind como el segundo.Pero estoy pensando en agregar férula a mi lista de cosas que podrían controlar mi estupidez ;-) Pero este cheque es solo molesto,

Las advertencias de gcc que uso:-Wall -W -Wextra -Wconversion -Wshadow -Wcast-qual -Wwrite-strings -Werror

Nota 2:Conozco los posibles problemas de portabilidad que podrían derivarse de ese mal comportamiento.Pero creo que aumenta la legibilidad, es decir, no tener que saltar hacia arriba y hacia abajo para buscar este tipo de declaraciones es más valioso (y esto podemos discutirlo en otro hilo).


Actualizar:Un poco más de información, puse el código anterior en un archivo llamado main.c.La plataforma utilizada es Ubuntu 8.04 y GVIM como editor, y esta es la salida de FILST cuando la ejecuto:

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

Y esto abre 2 preguntas más en las que no había pensado antes.

  1. "redundante con el valor actual", ¿qué valor actual?

  2. ¿Por qué es un error de análisis y no una advertencia?


Actualizar::Hay una posibilidad de parchear la férula para respaldar este problema, no he probado esto, pero aún así, pero creo que es la solución.

¿Fue útil?

Solución

Aquí hay un parche: http://www.cs.virginia.edu /pipermail/splint-discuss/attachments/20080718/52cc25f6/attachment.obj

Usted debe ser capaz de alimentar a que a través de P2 parche si se encuentra en el directorio férula / src, y entonces, sólo se debe reconstruir.

Eso es de este correo electrónico: http://www.cs.virginia.edu/pipermail /splint-discuss/2008-July/001190.html

(Lo siento sobre el espaciado en eso.)

Usted encontrará que con el tiempo si sigue el hilo starblue relacionado con, pero que pensé en ir al final para usted.

férula parece no tener un mantenedor en este momento, por desgracia. Me considero intensificando y haciendo algo más si no estuviera tan ocupado.

Jake

Otros consejos

Este hilo en el correo Férula lista discute el tema.

Parece que el analizador es principalmente C89 / C90, sólo la biblioteca parece ser C99.

Dado que el problema es con el analizador no puede hacer que se vaya estableciendo banderas.

No estoy familiarizado con la férula, pero desde sus preguntas frecuentes:

La férula es independiente de su compilador.Verifica el código C estándar, de acuerdo con la especificación ISO C99.La férula admite la mayoría, pero no todas, de las extensiones C99 al ANSI C.La férula admite algunas de las extensiones del compilador GCC (si se usa +gnuextensions).

La posición de su declaración cumple perfectamente con C99, por lo que quizás podría considerar esto como un error en la férula.O es una de las "extensiones" que aún no están soportadas por una férula.De cualquier manera, es posible que estén interesados ​​en sus comentarios.No debería haber ninguna razón para que una herramienta lint compatible con C99 se queje de las declaraciones de variables.

Por lo general, la férula, si algo se puede suprimir dirá "suprimir esto con + thisflag o -thisflag"

Usted puede tratar de férula + gnuextensions foo.c, que se enciende (la mayoría) de GNU / extensiones del CCG que férula de otro modo en desacuerdo con.

Yo uso férula casi tan frecuentemente como lo uso valgrind.

Editar:

Como otros han dicho, su funcionamiento en el analizador (no el analizador), por lo que las banderas de verdad no van a ayudar en este caso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top