In C17's final draft N2176 document,
A label name is the only kind of identifier that has function scope. It can be used (in a goto statement) anywhere in the function in which it appears, and is declared implicitly by its syntactic appearance (followed by a : and a statement).
Any other identifier has scope that begins just after the completion of its declarator.
So, I find it conflicting to say that the scope of a label name starts at the start of a function body and end at the end of a function body, because of the paragraph 7 in 6.2.1 (to say that it starts after the completion of the label name's declaration does not makes sense when it can be accessed before its declaration).
Where exactly does the scope of a label name starts in C?
Section 6.2.1p3 is correct, as that explicitly talks about labels.
If a label's scope didn't start until the point it appears, you wouldn't be able to do forward jumps like this:
void foo()
{
goto bar;
print("unreachable\n");
bar:
printf("at bar\n");
}
In fact, it's generally considered good practice to only use a goto
to jump forward.