Frage

Befolgen irgendwelche Redakteure die #line-Anweisungen von C in Bezug auf goto-line-Funktionen?

Kontext:Ich arbeite an einem Codegenerator und muss zu einer Zeile der Ausgabe springen, aber die Zeile wird relativ zu den #line-Anweisungen angegeben, die ich hinzufüge.Ich kann sie fallen lassen, aber dann ist es noch schlimmer, die Eingabezeile zu finden

War es hilfreich?

Lösung

Wenn der Editor skriptfähig ist, sollte es möglich sein, ein Skript für die Navigation zu schreiben.Möglicherweise gibt es sogar ein Vim- oder Emacs-Skript, das bereits etwas Ähnliches tut.

FWIW, als ich viel Bison/Flexx schreibe, habe ich eins geschrieben Zeus Lua-Makroskript, das versucht hat, etwas Ähnliches zu tun (z. B.Bewegen Sie sich von der Eingabedatei zur entsprechenden Zeile der Ausgabedatei, indem Sie nach der #Zeilenmarkierung suchen).

Für alle, die Interesse haben könnten hier ist dieses spezielle Makroskript.

Andere Tipps

#line Direktiven werden normalerweise vom Precompiler und nicht in den Quellcode eingefügt, sodass Redakteure dies normalerweise nicht berücksichtigen, wenn die Dateierweiterung lautet .c.

Die normale Dateierweiterung für nachkompilierte Dateien lautet jedoch .i oder .gch, also könnten Sie es versuchen und sehen, was passiert.

Ich habe Folgendes in einer Header -Datei gelegentlich verwendet, um klickbare Elemente im VC6- und den neuesten VS (2003+) -Kompiler Ousut -Fenster zu erstellen.

Grundsätzlich nutzt dies die Tatsache, dass Elemente, die in der Compiler -Ausgabe ausgeben, im Wesentlichen für "Pfad (Leinenum) analysiert werden:Nachricht".

Dies setzt die Behandlung von „Pragma Remind“ durch den Microsoft-Compiler voraus.

Das ist nicht ganz genau das, was Sie gefragt haben ...Es ist jedoch im Allgemeinen hilfreich, um zu etwas zu kommen, den Sie dazu bringen können, den Compiler zu emittieren, das einige Redakteure ehren könnten.

    // 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")

Ich habe es eine Weile nicht ausprobiert, aber es sollte trotzdem funktionieren.

Verwenden Sie sed oder ein ähnliches Tool, um die #Zeilen in etwas anderes zu übersetzen, das nicht vom Compiler interpretiert wird, sodass Sie C-Fehlermeldungen in der echten Zeile erhalten, aber einen Verweis auf die ursprüngliche Eingabedatei in der Nähe haben.

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