Frage

Ich versuche zu rennen splint auf einer C -Quelle, die enthält complex.h aus der Standard -C -Bibliothek zur Unterstützung komplexer Arithmetik.

Leider, splint fällt mit dem folgenden Fehler fehl.

Schiene 3.1.2 --- 03. Mai 2009

/usr/include/bits/cmathcalls.h:54:31: Parse ERROR: Nicht-Funktionserklärung: _komplex: externes Doppel. (Für Hilfe bei analysierenden Fehlern siehe Splint -Help Parseerrors.) *** kann nicht fortgesetzt werden.

Das Googeln nach dem Problem führte nur dazu diese Nachricht Auf der Versandliste mit Split-Discuss-Mailing (die unbeantwortet bleibt).

Irgendwelche Ideen?

Aktualisieren

Hier ist ein sehr einfaches Beispiel für eine fehlgeschlagene Quelle:

#include <complex.h>

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

Versuche, die nicht unterstützten Neue zu definieren _Complex C99 Schlüsselwort führt zu einem Fehler mit dem imaginären Teil der komplexen Zahl (was nicht überraschend ist).

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.
War es hilfreich?

Lösung 3

Ich habe dies schließlich gelöst, indem ich vorübergehend überschrieben habe complex.h mit einem Dummy, wenn Sie anrufen 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

Der Dummy complex.h Die Datei unterdrückt die relevanten Schlüsselwörter und ersetzt Konstanten/Funktionen durch Dummy. Diese Schlüsselwörter/Konstanten/Funktionen wurden aus stammten die technischen Daten

Eine Kopie dieser Datei ist hier verfügbar: https://gist.github.com/1316366

Andere Tipps

Ich bin kein Schiene -Benutzer, also nehmen Sie Folgendes mit einem Körnchen Salz ...

Das _Complex Das Schlüsselwort wurde mit C99 hinzugefügt, und die FAQ der Schiene hat dies zu C99 zu sagen (http://www.splint.org/faq.html#quest15):

Splint unterstützt jedoch noch nicht alle C99 -Erweiterungen, daher gibt es einige legitime C -Programme, die geändert werden müssen.

Ich würde das erraten _Complex ist von dieser Einschränkung bedeckt.

Möglicherweise können Sie Spints offensichtliche Mangel an Unterstützung für die Unterstützung für _Complex unter Verwendung einer in den FAQ beschriebenen Technik (http://www.splint.org/faq.html#quest14), aber ich wäre überrascht, wenn dies Sie sehr weit gebracht hat, wenn Sie den Schild mit C99 -Code verwenden. _Complex:

Wenn Sie nur ein Schlüsselwort ignorieren möchten, können Sie hinzufügen -Dnonstandardkeyword= Damit den Präprozessor das Schlüsselwort beseitigt, wo nonstandardkeyword ist der Name des Schlüsselworts.

Ich hatte Mühe, Schiene zu bekommen, um Header zu ignorieren und nirgendwo online geeignete Antworten zu finden. Ich habe schließlich die integrierte Hilfe von Spint verwendet und Folgendes entdeckt:

#ifndef S_SPLINT_S

#endif

Wenn Sie dieses Paar um den Code legen, den Sie ignorieren möchten, wird es es ignorieren! Keines der anderen Dinge funktioniert für System -Header -Dateien, zumindest das, was ich gefunden habe.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top