Depends on which way you wish to go in the grammar.
However you do it there is no way using valid productions in the C grammar
for a statement non-terminal to be produced in the position if a function
body. It can only be a compound-statement.
A compound-statement
is a specific form of a statement (and has been so since the introduction
of the term in Algol 60). So, by all means, the function body is a
statement of particular form (and that was not the case in Algol 60).
No, it isn't a statement of a particular form. It has the same form as a
particular subclass of statement but that doesn't make it a statement.
Now that could be viewed as a defect in the standard if you expect the
semantics of C90 6.6/C99 6.8 (the clause defining a statement) to be
applied to an overall function body, because as it stands they are not. It
looks to me like C99 6.8 p2 and p3 should be moved to 6.8.2 because they
apply specifically to compound statements (you only get a sequence of
statements within a compound statement, and the term "block" specifically
relates to a compound statement).
In my opinion when Lawrence wrote that that particular compound-statement
was not a statement, he was wrong.
As far as the C standard is concerned I don't see any other way to
interpret it. Whether the C standard is defective in that respect (but
the fix I suggested doesn't make a function body a statement) and whether
it makes sense to consider a function body as a statement in more informal
discussion are different issues. My view on the second issue is mostly
"no", it creates more confusion than clarification.
Lawrence