7
votes

Outil / analyseur pour préprocesseur #IF.

Je travaille sur de nombreux fichiers C-Sourcecode contenant de nombreux pré-processeurs #if , #elSeif et #else instructions.

Ces affirmations recherchent souvent un #define , par exemple xxx

souvent, ces affirmations de préprocesseur sont situées dans des déclarations C-Si, ce qui rend le code SourceCode presque illisible pour Beeings humains.

Le #define S utilisé pour ce pré-processeur #if Les instructions sont définies dans un fichier supplémentaire.

My idée désormais est d'avoir un outil qui vérifie ces paramètres de commutateur #define d et ne copie que les lignes de Sourcecode qui s'appliquent à l'aide du numéro actuel définit / commutateur.

pour le Au-dessus de l'exemple, j'aimerais obtenir un nouveau fichier .C qui contient uniquement xxx

supposé le #define de switch_testmode N'est-ce pas égal à Switch_TestModeon .

Y a-t-il des outils (Freeware || Low-cost) disponible ce travail? Ou est-ce que je dois écrire mon propre analyseur de préprocesseur pour cela?

(Il est impossible pour moi d'exécuter le compilateur à l'aide d'un paramètre spécial qui fait ce travail, car notre société crée le C-SourceCode, une autre La société est compilant.)

Merci pour tout indice!

Cordialement

Thomas


1 commentaires

Peu de choses à considérer / à explorer: si votre client signale les numéros de ligne d'erreur de compilation, ils seront plus difficiles à mapper sur vos sources d'origine. Les préprocesseurs mettent généralement une balise dans leur sortie afin que le compilateur puisse fournir des numéros de ligne utiles, mais je ne suis pas au courant de celui-ci normalisé entre les compilateurs afin que vous ne puissiez pas connaître votre production suffisamment pour les compilateurs de vos clients.


4 Réponses :


1
votes

Vous pouvez exécuter le compilateur GNU à l'aide de la ligne de commande d'option -E pour faire le prétraitement.

http://gcc.gnu.org/onlinedocs/gcc/preprocessor- Options.html


2 commentaires

Ce n'est pas exactement ce que l'OP demande car cela entraînera également une évaluation d'autres directives de prétraitement et des invocations macro.


OP a dit: "Les lignes de SourceCode qui s'appliquent à l'aide du numéro actuel définissent / commutateurs". S'il voulait dire un ensemble partiel, il aurait pu le dire. D'accord, la réponse du Sunifdef est meilleure s'il ne veut que supprimer certains de conditionnels.



2
votes

essayer Sunifdef

Edit: qui est devenu maintenant devenu coan


0 commentaires

1
votes

Vous pouvez utiliser UNIFDEF.


0 commentaires

4
votes

Unifdef est disponible chez http://dotat.at/prog/unifdef/ .


1 commentaires

Cet outil a un très beau style de codage et une compilation extrêmement facile (pas de voiture, juste un simple maquillage, ainsi qu'une solution pour Visual Studio sous Windows). Sa simplicité m'a charmé ...