Here are special features for indentation in C mode and related modes:
Reindent the current top-level function definition or aggregate type
Reindent each line in the balanced expression that follows point
c-indent-exp). A prefix argument inhibits warning messages
about invalid syntax.
Reindent the current line, and/or in some cases insert a tab character
If c-tab-always-indent is t, this command always reindents the current line and does nothing else. This is the default.
If that variable is
nil, this command reindents the current line
only if point is at the left margin or in the line’s indentation;
otherwise, it inserts a tab (or the equivalent number of spaces,
if indent-tabs-mode is
Any other value (not
nil or t) means always reindent the
line, and also insert a tab if within a comment or a string.
To reindent the whole current buffer, type C-x h C-M-\. This first selects the whole buffer as the region, then reindents that region.
To reindent the current block, use C-M-u C-M-q. This moves to the front of the block and then reindents it all.