https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83397
--- Comment #3 from joseph at codesourcery dot com <joseph at codesourcery dot com> --- DR#317 explicitly confirms that () is not a prototype in a function definition. It's not valid in ISO C to call a variadic function without a prototype in scope. To the extent that GCC allows for it, presumably it's for compatibility with code that e.g. calls printf without including <stdio.h>.