"The grammar allows it" isn't enough. The grammar [including the lexis]
allows `int djh908gf( void *ewjh8455534 );` too, and `int *a, b;`,
and unrestrained use of `goto`, and redundant `auto`s and irrelevant
`register`s and pointless casts. The point about a widely-used ordering
for the formally order-irrelevant parts of a declaration means that
we don't have to /care/.
One point that no one has brought up is that reading code in quantity
is like reading English. One does not read one word at a time and
think about what the combination of words means. We recognize phrases
and even multi-line conventional idioms. When those conventional
phrases are scrambled, we have to go back to word at a time reading
and interpreting, at least momentarily. This not only slows the scan,
but interrupts the flow of thinking and absorbing the meaning of the
code.
In practice, over many years, conventions have appeared which make
this process possible. There are variations, but few, and they are
well known. Although I have a preferred brace style, I can switch
gears to one of the other conventional styles easily, so long as
there's consistency (the reason that maintenance programmers try to
maintain the style of the code they're changing.) OTOH, if you decided
that all opening braces should be in column 80 and all closing braces
should be indented from the previous statement, that's not one of the
conventions we're used to, and most of us would slow *way* down while
reading it, even though the compiler wouldn't mind a bit.
(Incidentally, although Frederick may be an expert cook, I suspect
he'd have some surprises in store if he took on the job of a real
chef.)