Frage

Hat jemand Erfahrung mit Sparse ? Ich scheine nicht in der Lage, alle Unterlagen zu finden, so die Warnungen und Fehler es sind mir unklar, produziert. Ich habe versucht, die Mailingliste und man-Seite überprüft, aber es ist wirklich nicht viel in entweder.

Zum Beispiel verwende ich INT_MAX in einen meiner Dateien. Dies erzeugt einen Fehler (undefined Identifier), obwohl ich # include limits.h.

Gibt es einen Ort, wo die Fehler und Warnungen erklärt wurden?

War es hilfreich?

Lösung

Sparse ist kein Fussel sein, pro sagen soll. Sparse sollte einen Parse-Baum von beliebigem Code erzeugen, so dass sie weiter analysiert werden können.

In Ihrem Beispiel entweder Sie wollen GNU_SOURCE definieren (was ich dann auch auf __GNUC__ glauben), die die Bits setzen Sie in limits.h benötigen

würde ich definieren __GNUC__ auf eigenem vermeiden, da einige Dinge, die es ohne all die anderen Schalter in einer nicht definierten Weise könnte verhalten aktiviert, die GNU_SOURCE schaltet definiert ist.

ist mein Punkt nicht, dass Sie durch Fehler quetschen Fehler zu helfen, seine dass spärliche wiederholen wird meist als Bibliothek, nicht als Stand-alone-statische Analyse-Tool verwendet wird.

Aus meiner Kopie der Readme (nicht sicher, ob ich die aktuelle Version haben):

This means that a user of the library will literally just need to do

  struct string_list *filelist = NULL;
  char *file;

  action(sparse_initialize(argc, argv, filelist));

  FOR_EACH_PTR_NOTAG(filelist, file) {
    action(sparse(file));
  } END_FOR_EACH_PTR_NOTAG(file);

and he is now done - having a full C parse of the file he opened.  The
library doesn't need any more setup, and once done does not impose any
more requirements.  The user is free to do whatever he wants with the
parse tree that got built up, and needs not worry about the library ever
again.  There is no extra state, there are no parser callbacks, there is
only the parse tree that is described by the header files. The action
function takes a pointer to a symbol_list and does whatever it likes with it.

The library also contains (as an example user) a few clients that do the
preprocessing, parsing and type evaluation and just print out the
results.  These clients were done to verify and debug the library, and
also as trivial examples of what you can do with the parse tree once it
is formed, so that users can see how the tree is organized.

Die enthaltenen Clients sind ‚funktionale Testsuiten und Beispiele‘ als alles andere. Es ist ein sehr nützliches Werkzeug, aber Sie könnten eine andere Nutzung Winkel betrachten, wenn Sie es verwenden möchten. Ich mag es, weil es nicht * nicht verwendet lex / Bison, die es bemerkenswert leichter zu hacken macht.

Andere Tipps

Wenn Sie auf limits.h schauen Sie werden sehen, dass INT_MAX in diesem #if definiert ist

/* If we are not using GNU CC we have to define all the symbols ourself.
 Otherwise use gcc's definitions (see below).  */
#if !defined __GNUC__ || __GNUC__ < 2

so, um es Sie __GNUC__ sollte arbeiten undefine bevor einschließlich limits.h

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