Question

Des éditeurs respectent-ils les directives C #line en ce qui concerne les fonctionnalités de la ligne goto ?

Contexte:Je travaille sur un générateur de code et je dois accéder à une ligne de sortie, mais la ligne est spécifiée par rapport aux directives #line que j'ajoute.Je peux les laisser tomber, mais trouver la ligne d'entrée est encore plus pénible

Était-ce utile?

La solution

Si l'éditeur est scriptable, il devrait être possible d'écrire un script pour effectuer la navigation.Il se peut même qu'un script Vim ou Emacs fasse déjà quelque chose de similaire.

FWIW quand j'écris beaucoup de Bison/Flexx, j'ai écrit un Zeus Script de macro Lua qui tentait de faire quelque chose de similaire (c'est-à-direpasser du fichier d'entrée à la ligne correspondante du fichier de sortie en recherchant le marqueur #line).

Pour tous ceux qui pourraient être intéressés Voici ce script de macro particulier.

Autres conseils

#line les directives sont normalement insérées par le précompilateur, pas dans le code source, donc les éditeurs ne respecteront généralement pas cela si l'extension du fichier est .c.

Cependant, l'extension de fichier normale pour les fichiers post-compilés est .i ou .gch, vous pouvez donc essayer de l'utiliser et voir ce qui se passe.

J'ai utilisé ce qui suit dans un fichier d'en-tête occasionnellement pour produire des éléments cliquables dans la fenêtre VC6 et VS (2003+) OUPTUT du compilateur.

Fondamentalement, cela exploite le fait que les éléments de sortie dans la sortie du compilateur sont essentiellement analysés pour "Path (linenum):message".

Cela suppose le traitement du "rappel pragma" par le compilateur Microsoft.

Ce n'est pas tout à fait exactement ce que vous avez demandé...Mais il pourrait être généralement utile pour arriver à quelque chose que vous pouvez émettre le compilateur que certains éditeurs pourraient honorer.

    // The following definitions will allow you to insert
    // clickable items in the output stream of the Microsoft compiler.
    // The error and warning variants will be reported by the
    // IDE as actual warnings and errors... which means you can make
    // them occur in the task list.

    // In theory, the coding standards could be checked to some extent
    // in this way and reminders that show up as warnings or even
    // errors inserted...


    #define strify0(X) #X
    #define strify(X) strify0(X)
    #define remind(S) message(__FILE__ "(" strify( __LINE__ ) ") : " S)

    // example usage
    #pragma remind("warning:  fake warning")
    #pragma remind("error:  fake error")

Je ne l'ai pas essayé depuis un moment mais cela devrait quand même fonctionner.

Utilisez sed ou un outil similaire pour traduire les #lines en quelque chose d'autre non interprété par le compilateur, afin que vous obteniez des messages d'erreur C sur la vraie ligne, mais ayez une référence au fichier d'entrée d'origine à proximité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top