31.11.4 Other Commands for C Mode
- C-c C-w
- M-x c-subword-mode
- Enable (or disable) subword mode. In subword mode, Emacs's word
commands then recognize upper case letters in
‘StudlyCapsIdentifiers’ as word boundaries. This is indicated by
the flag ‘/w’ on the mode line after the mode name
(e.g. ‘C/law’). You can even use M-x c-subword-mode in
non-CC Mode buffers.
- M-x c-context-line-break
- This command inserts a line break and indents the new line in a manner
appropriate to the context. In normal code, it does the work of
newline-and-indent), in a C preprocessor line it
additionally inserts a ‘\’ at the line break, and within comments
it's like M-j (
c-context-line-break isn't bound to a key by default, but it
needs a binding to be useful. The following code will bind it to
C-j. We use
c-initialization-hook here to make sure
the keymap is loaded before we try to change it.
(defun my-bind-clb ()
(define-key c-mode-base-map "\C-j" 'c-context-line-break))
(add-hook 'c-initialization-hook 'my-bind-clb)
- Put mark at the end of a function definition, and put point at the
- Fill a paragraph, handling C and C++ comments (
If any part of the current line is a comment or within a comment, this
command fills the comment or the paragraph of it that point is in,
preserving the comment indentation and comment delimiters.
- C-c C-e
- Run the C preprocessor on the text in the region, and show the result,
which includes the expansion of all the macro calls
c-macro-expand). The buffer text before the region is also
included in preprocessing, for the sake of macros defined there, but the
output from this part isn't shown.
When you are debugging C code that uses macros, sometimes it is hard to
figure out precisely how the macros expand. With this command, you
don't have to figure it out; you can see the expansions.
- C-c C-\
- Insert or align ‘\’ characters at the ends of the lines of the
c-backslash-region). This is useful after writing or
editing a C macro definition.
If a line already ends in ‘\’, this command adjusts the amount of
whitespace before it. Otherwise, it inserts a new ‘\’. However,
the last line in the region is treated specially; no ‘\’ is
inserted on that line, and any ‘\’ there is deleted.
- M-x cpp-highlight-buffer
- Highlight parts of the text according to its preprocessor conditionals.
This command displays another buffer named ‘*CPP Edit*’, which
serves as a graphic menu for selecting how to display particular kinds
of conditionals and their contents. After changing various settings,
click on ‘[A]pply these settings’ (or go to that buffer and type
a) to rehighlight the C mode buffer accordingly.
- C-c C-s
- Display the syntactic information about the current source line
c-show-syntactic-information). This information directs how
the line is indented.
- M-x cwarn-mode
- M-x global-cwarn-mode
- CWarn minor mode highlights certain suspicious C and C++ constructions:
- Assignments inside expressions.
- Semicolon following immediately after ‘if’, ‘for’, and ‘while’
(except after a ‘do ... while’ statement);
- C++ functions with reference parameters.
You can enable the mode for one buffer with the command M-x
cwarn-mode, or for all suitable buffers with the command M-x
global-cwarn-mode or by customizing the variable
global-cwarn-mode. You must also enable Font Lock mode to make
- M-x hide-ifdef-mode
- Hide-ifdef minor mode hides selected code within ‘#if’ and
‘#ifdef’ preprocessor blocks. See the documentation string of
hide-ifdef-mode for more information.
- M-x ff-find-related-file
- Find a file “related” in a special way to the file visited by the
current buffer. Typically this will be the header file corresponding
to a C/C++ source file, or vice versa. The variable
ff-related-file-alist specifies how to compute related file