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.
È stato utile?

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 cui nonstandardkeyword è 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top