Question

Savez-vous comment puis-je faire attelle où je déclare ignorer mes variables?

Je sais que l'ancien c scolaire vous dit de déclarer des variables à droite au à partir de toutes les fonctions, mais depuis que je suis une mauvaise personne que je tiens à déclarer des choses près de chez moi les utiliser. Un bon exemple est de mettre int i; juste avant l'for (i = 0; ...)

.

Prenons un exemple très 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;
}

Ici attelle et les plus anciens compilateurs c aimeraient se déplacer int i; d'une ligne, ou de mettre {} autour de la déclaration et la boucle.

Et maintenant à la question, comment puis-je désactiver cette vérification? Mais garder les autres contrôles qui est bon?

Merci Johan


Note 1: J'utilise déjà des avertissements gcc (voir ci-dessous) comme première ligne de défense, et valgrind que le second. Mais je pense à ajouter une attelle à ma liste des choses qui pourraient contrôler ma stupidité ;-) Mais ce contrôle est tout simplement ennuyeux,

Les avertissements gcc j'utilise:  -Wall -W -Wextra -Wconversion -Wshadow -Wcast-Qual chaînes -Wwrite--Werror

Note 2: Je sais que les problèmes de portabilité potentiels qui pourraient découler de ce mauvais comportement. Mais je pense que cela augmente la lisibilité, alias ne pas avoir besoin de sauter de haut en bas pour rechercher ce type de déclarations est plus précieux (et cela, nous pouvons discuter dans un autre thread).


Mise à jour : Un peu plus d'informations, je mets le code ci-dessus dans un fichier appelé main.c. Plate-forme utilisée est Ubuntu 8.04 et gvim comme rédacteur en chef, ce qui est la sortie de l'attelle quand je le lance:

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

Et cela ouvre 2 autres questions que je ne pensais pas auparavant.

  1. "redondant avec la valeur actuelle", quelle est la valeur actuelle?

  2. Pourquoi est-il une erreur d'analyse et non un avertissement?


Mise à jour: : Il y a un posibility pour patcher attelle pour soutenir ce problème, Je ne l'ai pas essayé, mais encore, mais je pense qu'il est la solution.

Était-ce utile?

La solution

Voici un patch: http://www.cs.virginia.edu /pipermail/splint-discuss/attachments/20080718/52cc25f6/attachment.obj

Vous devriez être en mesure de nourrir que par -P2 patch si vous êtes dans le répertoire attelle / src, puis il devrait tout reconstruire.

C'est de cet e-mail: http://www.cs.virginia.edu/pipermail /splint-discuss/2008-July/001190.html

(Désolé pour l'espacement là-dessus.)

Vous trouverez que finalement si vous suivez le fil starblue lié à, mais je pensais que je passerais à la fin pour vous.

Splint semble être sans mainteneur en ce moment, malheureusement. J'envisager de renforcer et de faire un peu plus si je n'étais pas si occupé.

Jake

Autres conseils

Ce fil sur l'envoi de Splint liste traite de la question.

Il semble que l'analyseur syntaxique est la plupart du temps C89 / C90, seule la bibliothèque semble être C99.

Étant donné que la question est à l'analyseur que vous ne pouvez pas le faire disparaître en définissant des indicateurs.

Je ne suis pas familier avec attelle, mais de leur FAQ :

  

Splint est indépendant de votre   compilateur. Il vérifie le code C standard,   selon la norme ISO C99   spécification. Splint supporte la plupart,   mais pas tous, des extensions à C99   l'ANSI C. Attelle prend en charge une partie de   les extensions du compilateur gcc (si   + Gnuextensions est utilisé).

La position de votre déclaration est parfaitement conforme en C99, alors vous pourriez peut-être envisager un bug de l'attelle. Ou il est l'un des « extensions » pas encore pris en charge par attelle. De toute façon ils peuvent être intéressés par vos commentaires. Il devrait y avoir aucune raison d'un outil non pelucheux conforme à C99 pour se plaindre de déclarations variables.

En général, avec une attelle, si quelque chose peut être supprimée il va dire « supprimer ce avec + thisflag ou -thisflag »

Vous pouvez essayer attelle + gnuextensions foo.c, qui tourne sur (la plupart) des extensions GNU / GCC qui attelle autrement contester.

J'utilise attelle presque aussi souvent que je l'utilise valgrind.

Edit:

Comme d'autres l'ont dit, votre course dans l'analyseur (pas l'analyseur), de sorte que les drapeaux ne vont pas vraiment aider dans ce cas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top