Previous: Hungry Delete, Up: C Modes [Contents][Index]

#### 26.12.4 Other Commands for C Mode

`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 `RET` (`newline`), in a C preprocessor line it additionally inserts a ‘`\`’ at the line break, and within comments it’s like `M-j` (`c-indent-new-comment-line`).

  `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 `RET`. 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-m"
                    'c-context-line-break))
      (add-hook 'c-initialization-hook 'my-bind-clb)

`C-M-h`

  Put mark at the end of a function definition, and put point at the beginning (`c-mark-function`).

`M-q`

  Fill a paragraph, handling C and C++ comments (`c-fill-paragraph`). 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 region (`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 it work.

`M-x hide-ifdef-mode`

  Hide-ifdef minor mode hides selected code within ‘`#if`’ and ‘`#ifdef`’ preprocessor blocks. If you change the variable `hide-ifdef-shadow` to `t`, Hide-ifdef minor mode shadows preprocessor blocks by displaying them with a less prominent face, instead of hiding them entirely. 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 names.

Previous: Hungry Delete, Up: C Modes [Contents][Index]