Мне нужен инструмент, похожий на diff, который для файлов, определенных или принудительно обрабатываемых как источники C, уважает границы функций. То есть не пытается совместить строки одной функции со строками разных функций в другом файле.
Требования:
Желательно:
Вы можете рассмотреть семейство умных дифференциаторов Semantic Designs (моя компания).
Smart Differencer анализирует исходный текст для двух сравниваемых файлов, используя точный анализатор языка (и даже диалекта, например, VisualStudio 2010), строит дерево, а затем находит редактирование дерева с минимальным расстоянием, чтобы объяснить, чем они отличаются с точки зрения грамматика. Это означает отчет о дельтах, таких как «измененное выражение», «перемещенный оператор», «переименованная переменная», с использованием точной информации о строке и столбце. Поскольку он использует синтаксический анализатор, он игнорирует изменения в пробелах (хотя вы можете попросить его рассматривать комментарии как не пробелы в качестве опции).
Он изначально работает под Windows, без проблем работает в Linux под Wine с использованием предоставленных скриптов sh. Это коммерческое. Вывод похож на сравнение, потому что это инструмент сравнения, а не графический интерфейс.
Smart Differer работает со многими языками. Для версии C возникают некоторые трудности при анализе исходного кода C с неловко размещенными макросами и/или условиями препроцессора; обратите внимание, что он пытается анализировать исходные файлы без контекста полной единицы компиляции, которую вы обычно передаете компилятору. Файлы системных заголовков, как правило, здесь довольно плохи, но редко кто-то хочет их сравнивать. Вы можете улучшить их, предоставив ему некоторые подсказки о вещах, которые являются макросами; если вы хотите немного изменить свой исходный код, один раз, переместив неудобные условные операторы, вы можете в значительной степени решить эту проблему.
Не совсем то, что хочет OP, но суть этого, кажется, совпадает.
Ира Бакстер
айнпоклум
Ира Бакстер
айнпоклум