fmtcheck (https://linux.die.net/man/3/fmtcheck , part of libbsd on Linux, or available on BSDs) does this, though the man page mentions that it does not support all extensions that printf does.
According to https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=224143 , fmtcheck ignores unused arguments, which may or may not be what you want.