Да, это разница и общий язык. Позвольте мне начать с общих позиций: оба они являются частью проекта LLVM, который, как известно, предоставляет библиотеки и исполняемые файлы, построенные на его основе.
В этом случае компилятор clang использует внешний интерфейс для создания AST и создает предупреждения компилятора в это время. Это расширено с оптимизацией и codegen.
Clang-tidy использует тот же внешний интерфейс, а затем запускает сопоставления AST для выявления проблем.
В общем, предупреждения компилятора дешевы для проверки и не содержат (почти) никаких ложных срабатываний. У Clang-tidy есть дорогие чеки или те, с большим риском ложных срабатываний. Последний также содержит менее распространенные проверки или стилистические проверки.
Некоторые проверки действительно похожи, например, отсутствует переопределение, однако, tidy перехватывает все случаи, когда предупреждение подавляется, когда переопределение не используется в файле.
В общем, мне нравится включать все предупреждения и отключать те, которые должны быть исправлены позже. Это будет проверено как побочный эффект при компиляции. Clang-tidy обычно запускается позже в процессе (precommit или CI).