Difference between revisions of "Coding style"
(→Emacs cc-mode style: point to in-tree krb5-c-style.el instead of displaying settings inline) |
(→indent.pro settings) |
||
(4 intermediate revisions by 2 users not shown) | |||
Line 4: | Line 4: | ||
* [[Coding style/Formatting|Formatting]] |
* [[Coding style/Formatting|Formatting]] |
||
* [[Coding style/Practices|Practices]] |
* [[Coding style/Practices|Practices]] |
||
+ | * [[Coding style/Style checker|Style checker]] |
||
+ | * [[Coding style/Version control practices|Version control practices]] |
||
* [[Coding style/Transition_strategies|Transition strategies]] |
* [[Coding style/Transition_strategies|Transition strategies]] |
||
+ | * [[Coding style/Reindenting|Reindenting]] |
||
== External links == |
== External links == |
||
Line 99: | Line 102: | ||
-nbc |
-nbc |
||
-ncdb |
-ncdb |
||
+ | -ncs |
||
-ndj |
-ndj |
||
-nfc1 |
-nfc1 |
||
Line 108: | Line 112: | ||
-sob |
-sob |
||
</pre> |
</pre> |
||
+ | |||
=== vim/gvim editor settings === |
=== vim/gvim editor settings === |
||
− | These settings allow the vim |
+ | These settings allow the vim or gvim editor to conform to the MITKC code style: |
<pre> |
<pre> |
Latest revision as of 12:59, 2 February 2016
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
Load the elisp file src/util/krb5-c-style.el
(raw | annotated | history) to get mostly
the right thing to happen with respect to formatting style. krb5-c-style.el
uses a heuristic to detect whether a file should have the "krb5" C coding style applied. Currently, it uses the combined presence of c-basic-offset: 4
and indent-tabs-mode: nil
as a signal to use the "krb5" style. See Coding_style/Transition strategies for some details. Also, if you are newly adding the file-local variable settings line to a file, use M-x normal-mode
to reinitialize cc-mode with the new settings.
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 old versions of cc-mode (Emacs 20.3 or so).
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 -nut or -psl correctly though.
-bap -br -ce -ci4 -cli0 -d0 -di8 -i4 -ip4 -l79 -nbc -ncdb -ncs -ndj -nfc1 -lp -npcs -nut -psl -sc -sob
vim/gvim editor settings
These settings allow the vim or gvim editor to conform to the MITKC code style:
set shiftwidth=4 set tabstop=8 set softtabstop=4 set expandtab set nosmartindent set cindent set cinoptions=p0,t0,+4,(0,u4,U1,:0 set formatoptions=croq set comments=sr:/*,mb:*,ex:*/,:// set textwidth=79