Programming guidelines
Coding guidelines
Language
The common language at the Chair for Computer Aided Medical Procedures and Augmented Reality is C++ and English. A detailed document of coding guidelines containing rules and recommendations could be found in the SVN (\src\guidelines\)
Indentation
Use tabs at the beginning of lines (for a visual markup of nested code) only - one tab per nesting level. After you typed the first non-tab character, always use spaces and never tabs (also for grouping).
Naming Conventions
- Start class/struct names with a capital letter and variables with a small case letter. Only capitalize the first letter of a new word inside a name. Do not use underscores inside names (except in member variables, see below). Example:
myHmdDisplay
- Precede non-static member variables with
m_
.
- Don't be afraid of long variable names or comments. You may save a few seconds of typing using short text but other people will need much more time understanding your code.
Other
if (myPointer) {
// pointer is set => pointer value != 0 => evaluation to true
}
if (!myPointer) {
// pointer is not set => pointer == 0 => evaluation to false
}
- Never double code. If lines of code reappear, you can usually "outsource" them to a new method and call this method multiple times.
Version control system
Please refer to
this document for more information on version control systems at the chair.
Code documentation
Use
Doxygen style to comment all of your code!
Paths
Each project is checked in the CVS repository as a CVS module. Directory names are not allowed to have white spaces. Use capital letters instead (e.g. Don't 'My project' Do 'MyProject'). In each module there is a path with documents, source, doxygen, (if necessary) binaries.
I propose two kinds of repositories:
- Internal repository for chair members on rayhalle1
- Students repository for students (Diplomarbeit, Praktikum, SEP, IDP our libraries) on atnavab5
Word processing
Official text documents are created with pdfTeX. Our editing IDE is TeXnicCenter. Unfortunately, the computers in the computer pool have WinEdt installed that provides the same functionality but it is commercial.
Also possible is MS Word 2002 for easier interaction with external people.
Impotant Notes
When programming and especially compiling libraries with Visual Studio .NET you must take care that the 'Runtime Library'-Flags in the library and any program that uses the library are exactly the same. This is very (!) important. Otherwise you will get a lot of errors. You can find the switch under the 'Project settings' -> 'C/C++' -> 'Code Generation' -> 'Runtime Library'. I am currently using the flags /MT and /MTd. If any of you knows a good reason for changing this please tell us. Otherwise I would recommend, if we could agree up on these settings and thus won't run into intenal incompatibilities.
Camplib & TNT resp. JAMA
Some of our libraries need the Template Numerical Toolkit and the JAMA header files in order to compile properly. You can download them
here. Please do not (!) include the references to the header files in your projects because we want to be able to store the files at different locations. Instead set the reference to these files under 'Tools' -> 'Options' -> 'Projects' -> 'VC++Directories' -> 'Show directories for:' -> 'Include files'.