Ein C-Datei-Layout-fähiges Diff-Tool?

Ich hätte gerne ein Diff-ähnliches Tool, das bei Dateien, die als C-Quellen behandelt oder als C-Quellen behandelt werden müssen, Funktionsgrenzen respektiert. Das heißt, es wird nicht versucht, die Zeilen einer einzelnen Funktion mit den Zeilen verschiedener Funktionen in der anderen Datei abzugleichen.

Anforderungen:

  • Läuft unter Linux

Wünschenswert:

  • Gratis
  • Kostenlos
  • Hat eine interaktive GUI (wie meld, kdiff3 etc.)
  • Plugs in Diff-bezogenen Tools
Scheint, dass Sie "Funktionsname" bewusst meinen und nur Funktionen mit demselben Namen vergleichen möchten?
@IraBaxter: Ja, das stimmt.
Keine Antworten in 60 Tagen. Sind Sie an einem Tool interessiert, das Quelldateien nach Sprachstrukturen (anstelle von Textzeilen) vergleicht [das nicht speziell Funktionen abgleicht]?
@IraBaxter: Sicher, das ist nah genug, um interessant zu sein.

Antworten (1)

Sie könnten Semantic Designs (meine Firma) als Familie von Smart Differencers betrachten.

Der Smart Differencer parst den Quelltext für zwei zu vergleichende Dateien mit einem sprach- (und sogar dialektgenauen, z. B. VisualStudio 2010) Parser, erstellt einen Baum und findet dann eine Baumbearbeitung mit minimalem Abstand, um zu erklären, wie sie sich in Bezug auf unterscheiden die Grammatik. Dies bedeutet, dass Deltas wie „geänderter Ausdruck“, „verschobene Anweisung“, „umbenannte Variable“ unter Verwendung genauer Zeilen- und Spalteninformationen gemeldet werden. Da es einen Parser verwendet, ignoriert es Änderungen in Leerzeichen (obwohl Sie es optional bitten können, Kommentare als Nicht-Leerzeichen zu betrachten).

Es läuft nativ unter Windows, nahtlos unter Linux unter Wine mit bereitgestellten sh-Skripten. Es ist kommerziell. Die Ausgabe ist Diff-ähnlich, da es sich um ein Diff-Tool handelt, anstatt eine GUI zu haben.

Smart Differencer arbeitet mit vielen Sprachen. Für die C-Version hat es einige Schwierigkeiten, den C-Quelltext mit ungeschickt platzierten Makros und/oder Präprozessor-Bedingungen zu parsen; Beachten Sie, dass es versucht, Quelldateien ohne den Kontext der vollständigen Kompilierungseinheit zu analysieren, die Sie normalerweise einem Compiler zuführen. System-Header-Dateien sind hier in der Regel ziemlich schlecht, aber selten möchte man diese vergleichen. Sie können diese verbessern, indem Sie einige Hinweise zu Dingen geben, die Makros sind. Wenn Sie bereit sind, Ihren Quellcode ein wenig zu modifizieren, können Sie dieses Problem durch einmaliges Verschieben umständlicher Bedingungen ziemlich gut lösen.

Nicht genau das, was OP will, aber der Kern scheint zu passen.

... und können Sie die möglichen Operationen einschränken? zB "Anweisungen nicht in oder aus Funktionen verschieben"?
Die Smart Differencers kennen die Grammatik, aber keine Funktionsgrenzen. Das ist eine interessante Feature-Anfrage :-}