c-beginning-of-statement-1 is a compiled Lisp function in `cc-engine.el'.

(c-beginning-of-statement-1 &optional LIM IGNORE-LABELS NOERROR COMMA-DELIM)

Move to the start of the current statement or declaration, or to
the previous one if already at the beginning of one. Only
statements/declarations on the same level are considered, i.e. don't
move into or out of sexps (not even normal expression parentheses).

If point is already at the earliest statement within braces or parens,
this function doesn't move back into any whitespace preceding it; it
returns 'same in this case.

Stop at statement continuation tokens like "else", "catch",
"finally" and the "while" in "do ... while" if the start point
is within the continuation. If starting at such a token, move to the
corresponding statement start. If at the beginning of a statement,
move to the closest containing statement if there is any. This might
also stop at a continuation clause.

Labels are treated as part of the following statements if
IGNORE-LABELS is non-nil. (FIXME: Doesn't work if we stop at a known
statement start keyword.) Otherwise, each label is treated as a
separate statement.

Macros are ignored (i.e. skipped over) unless point is within one, in
which case the content of the macro is treated as normal code. Aside
from any normal statement starts found in it, stop at the first token
of the content in the macro, i.e. the expression of an "#if" or the
start of the definition in a "#define". Also stop at start of
macros before leaving them.

'label if stopped at a label or "case...:" or "default:";
'same if stopped at the beginning of the current statement;
'up if stepped to a containing statement;
'previous if stepped to a preceding statement;
'beginning if stepped from a statement continuation clause to
its start clause; or
'macro if stepped to a macro start.
Note that 'same and not 'label is returned if stopped at the same
label without crossing the colon character.

LIM may be given to limit the search. If the search hits the limit,
point will be left at the closest following token, or at the start
position if that is less ('same is returned in this case).

NOERROR turns off error logging to `c-parsing-error'.

Normally only ';' and virtual semicolons are considered to delimit
statements, but if COMMA-DELIM is non-nil then ',' is treated
as a delimiter too.

Note that this function might do hidden buffer changes. See the
comment at the start of cc-engine.el for more info.