Coding style

From K5Wiki
Revision as of 20:58, 7 January 2009 by KenRaeburn (talk | contribs) (Emacs cc-mode style: suggest copyright-update hook)

Jump to: navigation, search

The C language Coding style described here is based on the BSD coding style, with some additional elements from the GNU coding standards and the SunOS coding standards.

External links

Old version

Old content to be moved elsewhere is below.


The code in the krb5 source tree largely follows BSD KNF (/usr/share/misc/style on NetBSD) except that it uses a four column basic offset. The style described here is a synthesis of BSD KNF and the GNU coding standards for the C language. The formatting described in the "Formatting Your Source Code" section of the GNU coding standards is mostly what we want, except we use BSD brace style and BSD-ish conventions for the spacing around operators.

Coding practices for C

Aspects of C style in GNU coding std but not here

  • redundant parens to force extra indent of operators of different precedences
  • redundant parens to force general extra indent of expressions that are broken between lines
  • use of ^L characters to break up source files into pages
  • nitpicking about capitalization in comments of variable names when their values are meant
  • commenting usages of static variables
  • casts to void
  • separation of word in names with underscores vs case change
  • enum vs #define'd integer constants
  • 14 char filename limits, MS-DOS filename limits
  • portability
  • system library function quirks
  • internationalization
  • mmap()

Aspects of C style in BSD KNF but not here

  • sorting of header files
  • sorting of struct members
  • separating struct tag decl and struct typedef
  • sorting of var decl
  • lining up var names in decls
  • newline after decls
  • usage of __P
  • usage of getopt
  • not initializing vars in decls
  • stdarg/varargs handling

Emacs cc-mode style

Putting the following code in your .emacs file will result in mostly the right thing happening with respect to formatting style. Note that you may want to turn on auto-newline feature of cc-mode, though that seems to have some bugs with brace-elseif-brace handling at least in the version of cc-mode that comes with emacs 20.3.

       (defconst krb5-c-style
            brace-elseif-brace brace-else-brace defun-close-semi)
           (c-comment-continuation-stars . "* ")
           (c-electric-pound-behavior alignleft)
            (class-open after)
            (substatement-open after)
            (block-close . c-snug-do-while)
            (extern-lang-open after))
            (case-label after)
            (label after))
           (c-indent-comments-syntactically-p . t)
           (c-label-minimum-indentation . 0)
       (defun krb5-c-hook ()
         (c-add-style "krb5" krb5-c-style t))
       (add-hook 'c-mode-common-hook 'krb5-c-hook)

You might also want to try (for Emacs 22 and later):

       (add-hook 'before-save-hook 'copyright-update)

to let you automatically update the year in the top-most copyright notice in a file when you save it.

indent.pro settings

The following settings for the indent program should produce a reasonable approximation to the C coding style described here, though some manual cleanup may be necessary. Note that the gindent installed in the gnu locker does not currently handle -psl correctly though.