Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
openfoam
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Model registry
Analyze
Contributor analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Development
openfoam
Commits
d8cf3901
Commit
d8cf3901
authored
15 years ago
by
Mark Olesen
Browse files
Options
Downloads
Patches
Plain Diff
added doc/codingStyleGuide.org for central revision
parent
d34aee63
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
doc/codingStyleGuide.org
+275
-0
275 additions, 0 deletions
doc/codingStyleGuide.org
with
275 additions
and
0 deletions
doc/codingStyleGuide.org
0 → 100644
+
275
−
0
View file @
d8cf3901
# -*- mode: org; -*-
#
#+TITLE: OpenFOAM C++ style guide
#+AUTHOR: OpenCFD Ltd.
#+DATE: November 2009
#+LINK: http://www.opencfd.co.uk
#+OPTIONS: author:nil ^:{}
* OpenFOAM C++ style guide
*** General
+ 80 character lines max
+ The body of control statements (eg, if, else, while, etc).
always delineated with brace brackets
+ stream output
<< is always four characters after the start of the stream, so that the <<
symbols align, i.e.
Info<<
os <<
so
WarningIn("className::functionName()")
<< "Warning message"
NOT
WarningIn("className::functionName()")
<< "Warning message"
+ no unnecessary class section headers, i.e. remove
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
// Check
// Edit
// Write
if they contain nothing, even if planned for 'future use'
+ class titles are centred
/*---------------------------------------------------------------------------*\
Class exampleClass Declaration
\*---------------------------------------------------------------------------*/
NOT
/*---------------------------------------------------------------------------*\
Class exampleClass Declaration
\*---------------------------------------------------------------------------*/
*** .H Files
+ header file spacing
Leave two empty lines between sections (as per functions in the .C file etc)
+ use "//- Comment" comments in header file
+ add descriptions to class data and functions
+ destructor
If adding a comment to the destructor - use //- and code as a normal function:
//- Destructor
~className();
+ inline functions
Use inline functions where appropriate in a separate classNameI.H file.
Do not clutter up the header file with function bodies
*** .C Files
+ Do not open/close namespaces in a .C file
Fully scope the function name, i.e.
Foam::returnType Foam::className::functionName()
NOT
namespace Foam
{
...
returnType className::functionName()
...
}
EXCEPTION
When there are multiple levels of namespace, they may be used in the .C
file, i.e.
namespace Foam
{
namespace compressible
{
namespace RASModels
{
...
} // End namespace RASModels
} // End namespace compressible
} // End namespace Foam
+ Use two empty lines between functions
*** Coding Practise
+ passing data as arguments or return
Pass label and scalar as copy, anything bigger by reference
+ const
Use everywhere it is applicable.
+ variable initialisation using "="
const className& variableName = otherClass.data();
NOT
const className& variableName(otherClass.data());
+ virtual functions
If a class is virtual - make all derived classes virtual.
*** Conditional Statements
if (condition)
{
code;
}
OR
if
(
long condition
)
{
code;
}
NOT (no space between "if" and "(")
if(condition)
{
code;
}
*** `for' Loops
for (i = 0; i < maxI; i++)
{
code;
}
OR
for
(
i = 0;
i < maxI;
i++
)
{
code;
}
NOT (no space between "for" and "(")
for(i = 0; i < maxI; i++)
{
code;
}
*** `forAll' loops
like for loops, but
forAll(
NOT
forAll (
*** Splitting Over Multiple Lines
+ splitting return type and function name
+ split initially after the function return type and left align
+ do not put "const" onto it's own line - use a split to keep it with the
function name and arguments.
so:
const Foam::longReturnTypeName&
Foam::longClassName::longFunctionName const
NOT
const Foam::longReturnTypeName&
Foam::longClassName::longFunctionName const
NOR
const Foam::longReturnTypeName& Foam::longClassName::longFunctionName
const
NOR
const Foam::longReturnTypeName& Foam::longClassName::
longFunctionName const
+ if need to split again, split at the function name (leaving behind the
preceding scoping "::"'s), and again, left align, i.e.
const Foam::longReturnTypeName&
Foam::veryveryveryverylongClassName::
veryveryveryverylongFunctionName const
+ splitting long lines at an "="
Indent after split
variableName =
longClassName.longFunctionName(longArgument);
OR (where necessary)
variableName =
longClassName.longFunctionName
(
longArgument1,
longArgument2
);
NOT
variableName =
longClassName.longFunctionName(longArgument);
NOR
variableName = longClassName.longFunctionName
(
longArgument1,
longArgument2
);
*** Maths and Logic
+ operator spacing
+ a + b, a - b
+ a*b, a/b
+ a & b, a ^ b
+ a = b, a != b
+ a < b, a > b, a >= b, a <= b
+ a || b, a && b
+ splitting formulae over several lines
Split and indent as per "splitting long lines at an "=""
with the operator on the lower line. Align operator so that first
variable, function or bracket on the next line is 4 spaces indented i.e.
variableName =
a*(a + b)
- exp(c/d)
*(k + t)
+ splitting logical tests over several lines
indent operator so that the next variable to test is aligned with the
four space indentation, i.e.
if
(
a == true
&& b == c
)
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment