stecca in mancanza il codice che include complex.h
-
01-10-2019 - |
Domanda
Sto cercando di eseguire splint
su una sorgente C che include complex.h
dalla libreria C standard per supportare l'aritmetica complessa.
Purtroppo, splint
non riesce con il seguente errore.
stecca 3.1.2 --- 3 maggio 2009
/usr/include/bits/cmathcalls.h:54:31: Errore di analisi: dichiarazione di non-function: _Complex: extern double. (Per informazioni su errori di analisi, vedere -help stecca parseerrors.) *** non può continuare.
Googling per il problema ha provocato solo questo messaggio sulla mailing list split-discutere (che rimane senza risposta).
Tutte le idee?
Aggiorna
Ecco un esempio molto semplice di una fonte in mancanza:
#include <complex.h>
int main() {
complex x = 2 + 8i;
x = x + 1;
}
I tentativi di ridefinire il _Complex
non supportato C99 Chiave porta ad un errore con la parte immaginaria del numero complesso (che non è sorprendente suppongo).
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.
Soluzione 3
Alla fine ho risolto il problema annullando momentaneamente complex.h
con un manichino di un momento della chiamata 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
Il file complex.h
fittizio sopprime le parole chiave pertinenti e sostituisce costanti / funzioni con quelli fittizi. Queste parole chiave / costanti / funzioni sono state raccolte da le specifiche
Una copia di questo file è disponibile qui: https://gist.github.com/1316366
Altri suggerimenti
Non sono un utente stecca, in modo da prendere il successivo con un grano di sale ...
La parola chiave _Complex
è stato aggiunto con la C99, e la stecca FAQ ha questo da dire su C99 ( http://www.splint.org/faq.html#quest15 ):
Tuttavia, stecca non supporta ancora tutte le estensioni C99 quindi ci sono alcuni programmi legittimi C che dovranno essere modificati.
Direi che _Complex
è coperta da questo avvertimento.
Si potrebbe essere in grado di aggirare apparente mancanza di stecca di supporto per _Complex
utilizzando una tecnica descritta nella FAQ ( http://www.splint.org/faq.html#quest14 ), ma sarei sorpreso se questo ti ha molto lontano con l'aiutare affare stecca con il codice di C99 utilizzando _Complex
:
Se si desidera semplicemente ignorare una parola chiave, è possibile aggiungere
-Dnonstandardkeyword=
per rendere il preprocessore eliminare la parola chiave, in cuinonstandardkeyword
è il nome della parola chiave.
stavo lottando per ottenere stecca di ignorare le intestazioni e non trovando risposte adeguate ovunque online. Io di stecca finalmente utilizzato in linea integrata, e scoperto questo:
#ifndef S_SPLINT_S #endif
Se si mette intorno a questa coppia codice che si desidera stecca di ignorarlo, sarà ignorarlo! Nessuna delle altre cose funziona per i file di intestazione di sistema, almeno che io ho trovato.