logo_kerberos.gif

Difference between revisions of "Coding style"

From K5Wiki
Jump to: navigation, search
(Emacs cc-mode style: rephrase last change - update isn't automatic, you get prompted)
(reorg slightly)
Line 1: Line 1:
 
__NOTOC__
 
__NOTOC__
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.
+
The C language '''Coding style''' described here is based on the BSD coding style (Kernel Normal Form - KNF), with some additional elements from the GNU coding standards and the SunOS coding standards.
   
 
* [[Coding style/Formatting|Formatting]]
 
* [[Coding style/Formatting|Formatting]]
Line 11: Line 11:
 
* [http://opensolaris.org/os/community/documentation/getting_started_docs/cstyle.ms.pdf C Style and Coding Standards for SunOS]
 
* [http://opensolaris.org/os/community/documentation/getting_started_docs/cstyle.ms.pdf C Style and Coding Standards for SunOS]
   
== Old version ==
+
== General information ==
 
Old content to be moved elsewhere is below.
 
 
----
 
 
== WRITING C CODE ==
 
 
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 ===
 
=== Aspects of C style in GNU coding std but not here ===

Revision as of 12:51, 8 January 2009

The C language Coding style described here is based on the BSD coding style (Kernel Normal Form - KNF), with some additional elements from the GNU coding standards and the SunOS coding standards.

External links

General information

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
         '("bsd" 
           (c-cleanup-list
            brace-elseif-brace brace-else-brace defun-close-semi)
           (c-comment-continuation-stars . "* ")
           (c-electric-pound-behavior alignleft)
           (c-hanging-braces-alist
            (brace-list-open)
            (class-open after)
            (substatement-open after)
            (block-close . c-snug-do-while)
            (extern-lang-open after))
           (c-hanging-colons-alist
            (case-label after)
            (label after))
           (c-hanging-comment-starter-p)
           (c-hanging-comment-ender-p)
           (c-indent-comments-syntactically-p . t)
           (c-label-minimum-indentation . 0)
           (c-special-indent-hook)))
       (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)

which will offer to update the year in the top-most copyright notice in a file when you save it, if it's not already current.

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.

-bap
-br
-ce
-ci4
-cli0
-d0
-di8
-i4
-ip4
-l79
-nbc
-ncdb
-ndj
-nfc1
-lp
-npcs
-psl
-sc
-sob