attelle défaillant sur le code qui comprend complex.h
-
01-10-2019 - |
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.
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é.