Проект, над которым я работал, использует простой набор макросов в заголовке, который включен в каждый файл (некоторые компиляторы позволяют указывать такой заголовок в командной строке, поэтому вы можете принудительно использовать его в make-файле): *
#define strcpy strcpy_is_banned_use_strlcpy
#define strcat strcat_is_banned_use_strlcat
#define strncpy strncpy_is_banned_use_strlcpy
#define strncat strncat_is_banned_use_strlcat
#define sprintf sprintf_is_banned_use_snprintf
С этими макросами сборка не удастся, если вы попытаетесь использовать запрещенную функцию (и компоновщик скажет вам, что вы должны использовать вместо этого).
Так что это не проверяется на коммит, как таковой, но пока члены вашей команды проверяют, что все строит, прежде чем они вернутся, система работает. А если нет, то все начинают получать электронные письма с перерывом в сборке, что быстро исправляет поведение.
Простой, но эффективный.