Попробуйте посмотреть в подробный вывод команд make, которые выполняются при компиляции - там должен быть какой-то флаг для указания версии стандарта. Или в сами Makefile-ы. Если нет - то версия зависит от компилятора и уже его версии.
Можно еще попытаться по коду определить. Например, если переменные определяются не в начале функций, а по середине где-нибудь, то скорее всего это не уже C89. Далее можно обратить внимание не используемые хэдеры (есть ли среди наих какие-нибудь из C11).
В исходниках может не быть никакого явного указания стандарта. Можно попробовать собирать проект начиная с самых старых версий и вести учет ошибок. Вот как ошибки уйдут - так и стандарт соотвествует.
Ты хочешь выполнить работу компиллятора? Программирование - это практическая наука. А компиллятор может проводить доказательство правоты кода (Питонщики это не поймут у них не так).
Пройдись скриптом по всем в цикле и получишь матрицу совместимости. Твой теоретический вопрос не имеет смысла пока ты сам не будешь знать чего ты конкретно хочешь от стандарта. Тогда можно уже и исходних переделать под любой стандарт. Я думаю что это не сложно.
Как я получил список. Я дернул clang с неправильным параметром -stx=x и он мне выдал список поддерживаемых стандартов. Там еще и семейство gnu есть.