Sparse n'est pas destiné à être une peluche, par exemple. Sparse est destiné à produire un arbre d'analyse de code arbitraire afin qu'il puisse être analysé plus avant.
Dans votre exemple, soit vous voulez définir GNU_SOURCE (que je crois tourne sur __GNUC__), qui expose les bits dont vous avez besoin limits.h
Je voudrais éviter de définir __GNUC__ lui-même, comme plusieurs choses qu'il Activates peut se comporter de manière indéfinie sans tous les autres commutateurs que GNU_SOURCE active.
Mon point est de ne pas vous aider par erreur de squash erreur, son réitérer que clairsemés est surtout utilisé comme une bibliothèque, et non comme un stand alone outil d'analyse statique.
De ma copie du README (pas sûr si j'ai la version actuelle):
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.
Les clients inclus sont plus « suites de tests fonctionnels et des exemples » qu'autre chose. C'est un outil très utile, mais vous pourriez envisager un autre angle d'utilisation si vous voulez l'utiliser. Je l'aime parce qu'il n'utilise pas * lex/bison, ce qui le rend remarquablement plus facile à pirater.
OK, je pense que je vais rester avec une attelle alors. Merci d'avoir expliqué cela, cependant. – Makis
Je l'ai utilisé à la fois rares et attelle, rares a quelques avertissements astucieuses qui ne sont pas trouvés par clang/gcc/attelle/CVM/attelle/cppcheck, ils sont 1) 0 utilisé comme NULL - dépend de votre style de code mais cela peut faire pour le code plus lisible. 2) suggérer des fonctions statiques - ou inclure l'en-tête qui les déclare, en fait je trouve que cela peut réparer de vrais bugs puisque si la déclaration dans l'en-tête et la source ont un conflit d'appariement peut facilement se bloquer. – ideasman42
Est-ce que l'outil clairsemé identifie les problèmes liés à l'endian (faites c = 2 cf = "- D__CHECK_ENDIAN__") seulement quand nous utilisons des macros comme __le32_to_cpu()? Ou peut-il identifier tous les types de questions liées à l'endianness comme les champs de bits, union, etc.? – linuxfreak