2010-06-29 4 views
1

J'essaie d'exécuter splint sur une source C qui inclut complex.h à partir de la bibliothèque C standard pour prendre en charge l'arithmétique complexe.Échec de l'attelle sur le code qui inclut complex.h

Malheureusement, splint échoue avec l'erreur suivante.

Splint 3.1.2 --- 03 May 2009

/usr/include/bits/cmathcalls.h:54:31: Parse Error: Non-function declaration: _Complex : extern double. (For help on parse errors, see splint -help parseerrors.) *** Cannot continue.

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

Des 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; 
} 

tente de redéfinir la non prise en charge _Complex C99 les mots-clés conduit à une erreur de la partie imaginaire du nombre complexe (ce qui n'est pas surprenant je suppose).

[email protected]:~$ 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. 

Répondre

0

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

[[email protected]]$ ls /opt/qa_tools/utils/splint_includes/ 
complex.h 

[[email protected]]$ 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 factice supprime les mots clés pertinents et remplace les constantes/fonctions avec celles fictives. Ces mots-clés/constantes/fonctions ont été tirées de the specs

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

3

Je ne suis pas un utilisateur d'attelle, prenez donc ce qui suit avec un grain de sel ...

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

However, Splint doesn't yet support all C99 extensions so there are some legitimate C programs that will need to be modified.

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

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

If you just want to ignore a keyword, you can add -Dnonstandardkeyword= to make the preprocessor eliminate the keyword, where nonstandardkeyword is the name of the keyword.

+0

+1 Merci Michael. J'ai essayé d'ignorer et redéfinir le mot-clé _Complex en passant -D_Complex = ?? pour attacher, mais l'attelle continue à s'étouffer sur la partie imaginaire de la définition de nombre complexe (par exemple complexe x = 2 + 8i). Mettra à jour la question avec plus d'informations. –

1

je luttais pour obtenir attelle d'ignorer les en-têtes et de ne pas trouver des réponses appropriées partout en ligne. J'ai finalement utilisé l'aide intégrée d'attelle et 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! Rien d'autre ne fonctionne pour les fichiers d'en-tête système, du moins ceux que j'ai trouvés.

Questions connexes