Aside: that's 6.9.1.
True; but int g() is also compatible with int h(int x, double y).
Function compatibility is much weaker for K&R1-style function
declarations, including definitions functioning(!) as declarations.
See 6.7.5.3p16 for details, although not much explanation.
So 'compatible' can't be, and per below isn't, the criterion used.
Useless aside: pete's newsreader (which identifies as Mozilla 3) used
Microsoft's nonstandard 'smart' quotes 0x91 and 0x92 but asserted
charset=iso-8859-1, and yours (ditto Mozilla 5) properly but
unhelpfully munged to UTF-8 U+FFFD Replacement.
I can't check what's actually in the Standard here, only what Adobe
Reader gives me, and I trust that as far as I can throw it.
The key point is that the requirement specified by the standard is that
any alternatives be "equivalent" to the specified forms, not
"compatible" with them. Unlike "compatible", the standard provide no
specific definition of "equivalent" that applies in this context. The
closest it comes is footnote 9, which lists a couple of ways in which
the declaration can be different while remaining equivalent. Those
examples neither clearly include nor clearly exclude this case. The
Rationale does not address this issue either.
Yes the documents don't clearly say so, but J11 must have intended to
allow K&R1-style for both 0-arg and 2-arg forms. As Tim Rentsch says,
in 1999 there was still a lot of K&R1-style code, and C99 retains
K&R1-style declaration and definition even though C89 had labelled
them obsolescent (and C99 still does). Even further, C89 didn't have
the wording "or equivalent (footnote 9)" yet in 1989 ALL existing code
was K&R1, and J11's mandate, secondary only to getting a standard at
all, was to preserve existing (K&R1) code.