Question

Je suis en train de courir splint sur une source de C qui comprend complex.h de la bibliothèque standard C pour soutenir l'arithmétique complexe.

Malheureusement, splint échoue avec l'erreur suivante.

  

Splint 3.1.2 --- 3 mai 2009

     

/usr/include/bits/cmathcalls.h:54:31:   Erreur d'analyse: Déclaration de non-fonction:       _Complex: extern double. (Pour obtenir une aide sur les erreurs parse, voir -help attelle       parseerrors.)   *** Impossible de continuer.

recherche sur Google pour le problème a donné lieu à seulement ce message sur la liste de diffusion divisée discuter (qui reste sans réponse).

Toutes les idées?

Mise à jour

Voici un exemple très simple d'une source à défaut:

#include <complex.h>

int main() {
  complex x = 2 + 8i;
  x = x + 1;
}

Les tentatives de redéfinir les mots-clés _Complex non pris en charge C99 conduit à une erreur de la partie imaginaire du nombre complexe (qui est pas surprenant que je suppose).

lsc@deepthought:~$ splint-D_Complex=double temp.c  
Splint 3.1.2 --- 03 May 2009

 temp.c:4:20: Parse Error. (For help on
 parse errors, see splint -help
                parseerrors.)
*** Cannot continue.
Était-ce utile?

La solution 3

J'ai finalement résolu ce problème en remplaçant temporairement complex.h avec un mannequin lors de l'appel splint.

[lsc@home]$ ls /opt/qa_tools/utils/splint_includes/
complex.h

[lsc@home]$ splint -I/opt/qa_tools/utils/splint_includes test.c
Splint 3.1.1 --- 15 Jun 2004

Finished checking --- no warnings

Le fichier complex.h supprime les constantes factice / fonctions des mots clés pertinents et les remplacer par factices. Ces mots-clés / constantes / fonctions ont été glanées les spécifications

Une copie de ce fichier est disponible ici: https://gist.github.com/1316366

Autres conseils

Je ne suis pas un utilisateur d'attelle, prenez donc la suivante avec un grain de sel ...

Le mot-clé _Complex a été ajouté avec C99, et la FAQ attelle a ceci à dire à propos de C99 ( http://www.splint.org/faq.html#quest15 ):

  

Cependant, Splint ne supporte pas encore toutes les extensions C99 donc il y a des programmes légitimes C qui devront être modifiés.

Je suppose que _Complex est couvert par cette mise en garde.

Vous pourriez être en mesure de travailler autour du manque de soutien apparent attelle pour _Complex en utilisant une technique décrite dans la FAQ ( http://www.splint.org/faq.html#quest14 ), mais je serais surpris si cela vous a bien loin d'aider beaucoup d'attelle avec le code C99 en utilisant _Complex:

  

Si vous voulez juste d'ignorer un mot-clé, vous pouvez ajouter -Dnonstandardkeyword= pour faire le préprocesseur éliminer le mot-clé, où nonstandardkeyword est le nom du mot-clé.

Je luttais pour obtenir attelle d'ignorer les en-têtes et de ne pas trouver des réponses appropriées partout en ligne. Je l'aide intégrée de l'attelle finalement utilisé, et a découvert ceci:

#ifndef S_SPLINT_S

#endif

Si vous mettez cette paire autour de code que vous voulez attelle d'ignorer, il l'ignorer! Aucun des autres choses pour les fichiers d'en-tête du système, au moins que je l'ai trouvé.

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