Y at-il un remède pour le blues préprocesseur?

Je sais que je peux demander au préprocesseur de cracher une sortie avec l’option -E dans mon cas particulier. Pour le code généré, cette sortie du préprocesseur est meursortingère. Par exemple, j’ai une application 4gl et Informix le convertit en C, ce qui provoque un désordre horrible.

Ce que je veux, c’est un éditeur qui me permette de spécifier les valeurs du préprocesseur en vigueur et de ne me montrer que le code correspondant. J’ai quelque chose de très basique dans Vim qui correspond à #ifdef et #endif , mais le code est rempli de constructions plus avancées telles que #ifndef , #if et #else . Pour aggraver les choses, les concepts sont logiquement plus complexes et je ne pense pas que mes compétences en script de Vim me permettent de tirer ce que je veux. Par exemple:

 #if DLEVEL > 5 #define SIGNAL 1 #if STACKUSE == 1 #define STACK 200 #else #define STACK 100 #endif #else #define SIGNAL 0 #if STACKUSE == 1 #define STACK 100 #else #define STACK 50 #endif #endif #if DLEVEL == 0 #define STACK 0 #elif DLEVEL == 1 #define STACK 100 #elif DLEVEL > 5 display( debugptr ); #else #define STACK 200 #endif 

Comprend la définition d’un évaluateur d’expression si je veux y répondre. Cela doit être un problème résolu! Si vous avez des suggestions de Vim ou d’autres, faites-le moi savoir.

L’éditeur Eclipse CDT fait un très bon travail en mettant en évidence le code basé sur les macros que vous déclarez être actif. Tu voudras peut-être vérifier. texte alternatif

Pour un éditeur, Eclipse CDT fonctionne assez bien. Il indique quel code est actif et quel code est # ifdef’ed out, il met en évidence la syntaxe dans le code qui est # ifdef’ed out afin que vous puissiez toujours le lire facilement, et il peut parcourir les expansions de macro une à la fois si vous passez la souris sur une macro.

cpp -dM filename.c traite un fichier et affiche uniquement les #défines en vigueur. Par exemple, dans votre code, il se peut qu’il crache

 #define DLEVEL 5 #define SIGNAL 1 #define STACK 200 #define STACKUSE 1 

sans encombrer la liste avec d’autres directives du préprocesseur ou avec du code C / C ++.

(Sur une note connexe, cpp -dM /dev/null est un moyen pratique de rechercher des macros prédéfinies pour votre plate-forme.)

Examinez “Son of Unifdef”, cité dans la réponse à Y at-il un pré-processeur C qui élimine les blocs #ifdef en fonction de valeurs définies / non définies? . Ce n’est pas un éditeur visuel. Cependant, il prendrait du code C (ou un code contenant des directives de préprocesseur C) et générerait un fichier modifié que vous pourriez ensuite comparer à l’original.

Je suis curieux de la mention de Informix 4GL (I4GL). Le code C qu’il génère n’est pas, autant que je sache, avec les constructions #ifdef . Au moins, la sortie n’était pas autorisée à en contenir quand j’en étais responsable. (Quelle version d’I4GL utilisez-vous?) Il y a beaucoup d’entrées #line ; ceux-ci vous permettent de poursuivre le code généré vers la source I4GL correspondante. J’ai un script qui convertit ces commentaires en commentaires C simples afin de pouvoir utiliser un débogueur ( gdb ou dbx ou … périr la pensée, sdb ou adb ) sur le code compilé. Et j’ai également vu des pré-processeurs ( cpp et m4 ) utilisés pour générer le code source I4GL à soumettre au compilateur I4GL.

Si vous utilisez Linux et que vous utilisez également GNOME, je devrais recommander GEdit . Je l’ai vraiment aimé après avoir installé des plugins pour Intellisense, la navigation de fichiers, etc. Si vous n’exécutez pas GNOME mais utilisez toujours Linux (KDE), vous pourrez peut-être utiliser Kate . Je n’ai pas trop longtemps joué avec ça, donc je n’ai pas grand chose à dire à ce sujet. GEdit fonctionnera dans KDE mais cela ne semblera pas correct.

Si vous utilisez Windows et que vous avez un très bon PC, essayez Netbeans (oui, c’est aussi pour C ++, pas seulement Java). Sinon, il y a toujours Visual C ++ 2008 (cela dépend quand même assez de la RAM).

Je ne suis pas sûr de pouvoir utiliser Mac, mais Netbeans fonctionne également (avec Linux).

Emacs a le mode hide-ifdef (je n’ai jamais eu à l’utiliser moi-même, je ne peux donc pas en garantir la qualité)

Vous pouvez également essayer unifdef, qui est un peu plus simple que sunifdef.