Well, the reason we have this like we do for old-style `plugin_*()` is specifically to check for compatibility.
It's not very nice if *really* compatible things are deemed not, but if the compiler thinks it's incompatible, is it really not? Also, could you propose another way to make sure the signature is correct, or at least try and warn if it isn't?
As for C, are there really any pragmas or attributes, is there really some that would lead to incompatibility of the prototype here, while actually not changing how the function need be called?