mikrocontroller.net

Forum: PC-Programmierung Visual C++ makro


Autor: VCbasic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde gerne in Microsoft Visuals C++ ein Makro schreiben welche mir 
ein #if xxx sucht bis zum dazugehörigen #else und #end geht und den Code 
dazwischen löscht. Für mehrere Dateien.

Wo gibt es ein Tut oder wer hat eine Idee+

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Heisse Kiste, wenn im #if ... #endif Abschnitt noch andere ähnliche 
Klammern stehen. Leichter wäre es, wenn das #endif spezifischer ist wie 
z-.b. nei #endif /* MAKRONAME */

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einen C-Präprozessor nehmen. Der macht genau das, wenn xxx nicht 
definiert ist.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Rolf:
> Einen C-Präprozessor nehmen. Der macht genau das, wenn xxx nicht
> definiert ist.

Der macht aber leider noch einiges mehr, z.B. C-Makros expandieren,
Headerfiles includen usw. Der OP möchte mit seinem Vorhaben vermutlich
den Quelltext verkleinern, nicht aufblasen ;-)

@VCbasic:
Um so etwas selbst zu programmieren, wäre es von Vorteil, wenn der
Editor wenigstens ein paar Grundfunktionen, wie das Springen von einem
#if zum zugehörigen #else und #endif zur Verfügung stellen würde, aus
denen man etwas zusammenbauen kann. Viele Stand-Alone-Editoren können
das schon lange.

<schleichwerbung_fuer_vim>
  Mit Vim, dem besten aller Editoren ;-), geht das ohne großen
  Aufwand:
  /^\s*#\s*if\s\+xxx\>^Md2]#
  Das Komplizierteste daran ist die Suche nach dem "#if xxx", wenn man
  Leerzeichen und Tabulatoren an allen erlaubten Stellen
  berücksichtigt. Der eigentliche Löschbefehl ist einfach d2]#, er
  löscht alles von der aktuellen Zeile (der mit dem #if) bis zum
  zugehörigen #endif.

  Das Ganze kann man noch in ein Register packen und wiederholt
  ausführen, bis die ganze Datei von den "#if xxx"-Konstrukten
  gesäubert ist. Auch eine Iteration über mehrere Dateien ist nicht
  schwierig.
</schleichwerbung_fuer_vim>

Aber zurück zu deiner Fragestellung:

Ich kenne das aktuelle Visual Studio nicht. In der letzten Version,
mit der ich gearbeitet habe (VC6) war der Editor noch ein besseres
Notepad und damit nicht für komplexere Such- und Änderungsaufgaben zu
gebrauchen. D.h. du müsstest das Matchen von verschachtelten #ifs
selbst programmieren. Aber vielleicht kann das aktuelle Visual Studio
inzwischen mehr.

Wie man überhaupt Makros und ähnliches für Visual Studio schreibt,
steht hier:

  http://msdn2.microsoft.com/en-us/library/xc52cke4(...

Kannst ja, wenn das Makro läuft, dieses hier posten. Mich würde
interessieren, wie so etwas aussieht, und andere können etwas dabei
lernen :-)

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe gerade auf freshmeat gesehen, was vielleicht helfen kann, die 
Sourcen aufzuräumen: "Son of Unifdef" http://www.sunifdef.strudl.org/

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.