|
|
|
Coding Guidelines for KPilot
|
|
|
|
============================
|
|
|
|
|
|
|
|
Of course we can wage war about what constitutes "good programming
|
|
|
|
practice". And agreeing on indentation style is difficult as well.
|
|
|
|
Below you can find the guidelines I try to stick to when writing
|
|
|
|
KPilot, split into "C++ Source Code" and "Header Files".
|
|
|
|
|
|
|
|
(For actual coding information and some information about how
|
|
|
|
KPilot works, see HOWTO-CONDUIT.txt)
|
|
|
|
|
|
|
|
|
|
|
|
C++ Source Code
|
|
|
|
===============
|
|
|
|
|
|
|
|
There are coding guidelines for KDE somewhere. I think they say
|
|
|
|
indent with 4 spaces, { on same line, } on separate line. I disagree,
|
|
|
|
so code I write -- and code I maintain -- slowly mutates to
|
|
|
|
|
|
|
|
* Indent with tabs
|
|
|
|
* { and } on separate lines
|
|
|
|
* C comments only for the GPL header and KDoc stuff
|
|
|
|
* C++ before the stuff they document, same indent level,
|
|
|
|
with possibly two extra lines with just // to set the
|
|
|
|
comment off from the code.
|
|
|
|
|
|
|
|
Whether or not anyone else follows is irrelevant, and I do try to
|
|
|
|
avoid gratuitous reformatting. Honest.
|
|
|
|
|
|
|
|
What I might do every now and then to get stuff "into shape" (and
|
|
|
|
I'd really appreciate it if you did so too before sending me patches)
|
|
|
|
is the following horrible invocation of indent:
|
|
|
|
|
|
|
|
indent -kr \
|
|
|
|
--blank-lines-after-declarations \
|
|
|
|
--braces-after-if-line \
|
|
|
|
--dont-cuddle-else \
|
|
|
|
--dont-line-up-parentheses \
|
|
|
|
--honour-newlines \
|
|
|
|
--space-after-cast \
|
|
|
|
--brace-indent 0 \
|
|
|
|
--case-brace-indentation 0 \
|
|
|
|
--case-indentation 0 \
|
|
|
|
--continuation-indentation 8 \
|
|
|
|
--indent-level 8 \
|
|
|
|
--tab-size 8 \
|
|
|
|
--line-length 78
|
|
|
|
|
|
|
|
This doesn't yield "perfect" code but it's close to my personal ideal.
|
|
|
|
If this coding style gives you gas, just use your own favorite indent
|
|
|
|
invocation to change it all back.
|
|
|
|
|
|
|
|
NOTE: indent wreaks havoc with C++ class definitions in header files,
|
|
|
|
so it's best not to touch those with it.
|
|
|
|
|
|
|
|
|
|
|
|
Header Files
|
|
|
|
============
|
|
|
|
|
|
|
|
One thing we *do* need to agree on is how to protect
|
|
|
|
.h files from double-inclusion. In TQt and TDE there's:
|
|
|
|
|
|
|
|
#ifndef QTCLASS_H
|
|
|
|
#ifndef _KDECLASS_H
|
|
|
|
|
|
|
|
so for KPilot the convention will be
|
|
|
|
|
|
|
|
#ifndef _KPILOT_FILENAME_H
|
|
|
|
|
|
|
|
where KPILOT is literal, ie. options.h is _KPILOT_OPTIONS_H and,
|
|
|
|
unfortunately, kpilotOptions.h is _KPILOT_KPILOTOPTIONS_H. This is
|
|
|
|
because the filename and the class don't always match up and not
|
|
|
|
every file contains a class of interest.
|
|
|
|
|
|
|
|
|
|
|
|
DEBUG Output
|
|
|
|
============
|
|
|
|
|
|
|
|
There are macros defined in options.h (which every source file
|
|
|
|
should include) that provide some uniform debugging output.
|
|
|
|
These are:
|
|
|
|
|
|
|
|
* FUNCTIONSETUP - Use this at the beginning of every function
|
|
|
|
(or those that are vaguely interesting). This will print out
|
|
|
|
a call trace indicator when debugging is on. It also defines
|
|
|
|
a local symbol fname for use with DEBUG* below.
|
|
|
|
* FUNCTIONSETUPL(level) - Use this at the beginning of a function.
|
|
|
|
It is like FUNCTIONSETUP but only prints if the debug level
|
|
|
|
is at least @p level. This avoids excessive debug output from
|
|
|
|
common functions.
|
|
|
|
|
|
|
|
For regular debugging output, use one of the three DEBUG* macros:
|
|
|
|
|
|
|
|
* DEBUGLIBRARY in code in lib/
|
|
|
|
* DEBUGKPILOT in code in kpilot/
|
|
|
|
* DEBUGCONDUIT in code in conduits/
|
|
|
|
|
|
|
|
This sends the debug output to the appropriate debug area. A typical
|
|
|
|
debug output stream looks like this:
|
|
|
|
|
|
|
|
DEBUGKPILOT << fname << ": "
|
|
|
|
<< actual debug info
|
|
|
|
<< endl;
|
|
|
|
|
|
|
|
Here, DEBUGKPILOT depends on what bit of code is being debugged; fname
|
|
|
|
is defined by FUNCTIONSETUP and takes care of proper indentation for
|
|
|
|
the call trace, the colon is for consistency and the actual debug
|
|
|
|
info can be whatever you want.
|
|
|
|
|
|
|
|
Adriaan de Groot
|
|
|
|
March 5th 2001
|
|
|
|
September 5th 2001 (revised)
|