Next: Filling and Breaking, Previous: Comment Commands, Up: Commands

### 4.3 Movement Commands

CC Mode contains some useful commands for moving around in C code.

`C-M-a` (`c-beginning-of-defun`)
`C-M-e` (`c-end-of-defun`)
  Move to the beginning or end of the current or next function. Other constructs (such as a structs or classes) which have a brace block also count as “functions” here. To move over several functions, you can give these commands a repeat count.

  The start of a function is at its header. The end of the function is after its closing brace, or after the semicolon of a construct (such as a `struct`) which doesn't end at the brace. These two commands try to leave point at the beginning of a line near the actual start or end of the function. This occasionally causes point not to move at all.

  These functions are analogous to the Emacs built-in commands `beginning-of-defun` and `end-of-defun`, except they eliminate the constraint that the top-level opening brace of the defun must be in column zero. See Defuns, for more information.

`C-M-a` (AWK Mode) (`c-awk-beginning-of-defun`)
`C-M-e` (AWK Mode) (`c-awk-end-of-defun`)
  Move to the beginning or end of the current or next AWK defun. These commands can take prefix-arguments, their functionality being entirely equivalent to `beginning-of-defun` and `end-of-defun`.

  AWK Mode defuns are either pattern/action pairs (either of which might be implicit) or user defined functions. Having the ‘`{`’ and ‘`}`’ (if there are any) in column zero, as is suggested for some modes, is neither necessary nor helpful in AWK mode.

`M-a` (`c-beginning-of-statement`)
`M-e` (`c-end-of-statement`)
  Move to the beginning or end of the innermost C statement. If point is already there, move to the next beginning or end of a statement, even if that means moving into a block. (Use `C-M-b` or `C-M-f` to move over a balanced block.) A prefix argument n means move over n statements.

  If point is within or next to a comment or a string which spans more than one line, these commands move by sentences instead of statements.

  When called from a program, these functions take three optional arguments: the repetition count, a buffer position limit which is the farthest back to search for the syntactic context, and a flag saying whether to do sentence motion in or near comments and multiline strings.

`C-c C-u` (`c-up-conditional`)
  Move back to the containing preprocessor conditional, leaving the mark behind. A prefix argument acts as a repeat count. With a negative argument, move forward to the end of the containing preprocessor conditional.

  ‘`#elif`’ is treated like ‘`#else`’ followed by ‘`#if`’, so the function stops at them when going backward, but not when going forward.

  This key sequence is not bound in AWK Mode, which doesn't have preprocessor statements.

`M-x c-up-conditional-with-else`
  A variety of `c-up-conditional` that also stops at ‘`#else`’ lines. Normally those lines are ignored.
`M-x c-down-conditional`
  Move forward into the next nested preprocessor conditional, leaving the mark behind. A prefix argument acts as a repeat count. With a negative argument, move backward into the previous nested preprocessor conditional.

  ‘`#elif`’ is treated like ‘`#else`’ followed by ‘`#if`’, so the function stops at them when going forward, but not when going backward.

`M-x c-down-conditional-with-else`
  A variety of `c-down-conditional` that also stops at ‘`#else`’ lines. Normally those lines are ignored.
`C-c C-p` (`c-backward-conditional`)
`C-c C-n` (`c-forward-conditional`)
  Move backward or forward across a preprocessor conditional, leaving the mark behind. A prefix argument acts as a repeat count. With a negative argument, move in the opposite direction.

  These key sequences are not bound in AWK Mode, which doesn't have preprocessor statements.

`M-x c-backward-into-nomenclature`
`M-x c-forward-into-nomenclature`
  A popular programming style, especially for object-oriented languages such as C++ is to write symbols in a mixed case format, where the first letter of each word is capitalized, and not separated by underscores. E.g. ‘`SymbolsWithMixedCaseAndNoUnderlines`’.

  These commands move backward or forward to the beginning of the next capitalized word. With prefix argument n, move n times. If n is negative, move in the opposite direction.

  Note that these two commands have been superseded by `subword-mode`, which you should use instead. See Subword Movement. They might be removed from a future release of CC Mode.