Savez-vous comment faire pour que splint ignore où je déclare mes variables?Comment faire pour que splint ignore où je déclare mes variables?
Je sais que l'ancienne école vous dit de déclarer les variables directement au commençant dans chaque fonction, mais comme je suis une mauvaise personne, j'aime déclarer les choses près de l'endroit où je les utilise. Un bon exemple est de mettre int i; juste avant le pour (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; en haut d'une ligne, ou pour mettre {} autour de la déclaration et de la boucle for.
Et maintenant à la question, comment désactiver cette vérification? Mais gardez les autres contrôles qui sont bons?
Merci Johan
Note 1: J'utilise déjà des avertissements gcc (voir ci-dessous) comme première ligne de défense, et valgrind comme deuxième. 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 -Wwrite-cordes -Werror
Note 2: Je connais les problèmes de portabilité potentiels qui pourraient provenir de ce mauvais comportement. Mais je pense qu'il 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 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, et c'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.
"redondant avec la valeur actuelle", quelle valeur actuelle?
Pourquoi est-ce une erreur d'analyse et non un avertissement?
Mise à jour:: Il y a une attelle à posibility patch pour soutenir ce problème, je n'ai pas essayé, mais encore, mais je pense qu'il est la solution.
Pendant que vous y êtes, vous devez déclarer int dans l'instruction for. – starblue
Recevez-vous un avertissement ennuyeux ou une erreur d'analyseur? –
et c'est l'espace entre "int" et "i" qui cassent l'attelle? – Johan