Different people have different ideas of how source code should be formatted
to be most beautiful and/or useful to work with. GiNaC itself was developed
-by a group of people whose ideas on these matters differred in some details.
+by a group of people whose ideas on these matters differed in some details.
It also evolved over the course of the years, and received contributions
from outside. As a result, the GiNaC source is not in all places 100%
consistent with the rules laid out in this document. Old code will
Here is an example that features both indentation and alignment:
-class person
-{
+class person {
string name; // person's full name
int age; // age in years
};
Take the "person" class definition from above as an example (here and in
the following, ':' represents a Tab, while '.' represents a Space). Assume
-that we had done both intendation and alignment with Tabs, with a tab-size
+that we had done both indentation and alignment with Tabs, with a tab-size
of 8:
|-------|-------|-------|-------|-------|-------|------- <- tab stops
-class person
-{
+class person {
::::::::string name;::::// person's full name
::::::::int age;::::::::// age in years
};
Now somebody who prefers a tab-size of 4 looks at the code:
|---|---|---|---|---|---|---|---|---|---|---|---|---|--- <- tab stops
-class person
-{
+class person {
::::string name;::::// person's full name
::::int age;::::// age in years
};
(remember, ':' are Tabs, '.' are Spaces):
|-------|-------|-------|-------|-------|-------|------- <- tab stops
-class person
-{
+class person {
::::::::string name;..// person's full name
::::::::int age;......// age in years
};
tab-size, and it still looks good:
|---|---|---|---|---|---|---|---|---|---|---|---|---|--- <- tab stops
-class person
-{
+class person {
::::string name;..// person's full name
::::int age;......// age in years
};
One word: K&R, also known as "One True Brace Style", suitably extended for
C++. The opening brace goes at the end of the line, except for function
-bodies and classes. Really short functions can be written in one single line.
+bodies. Really short functions can be written in one single line.
if (a == b) {
// do something
// catchall
}
- class foo
- {
+ class foo {
public:
foo(int i) : x(i)
{
int x;
};
+ namespace bar {
+ // a foo by any other name...
+ }
+
void foo::schwupp(char c)
{
// diwupp
Don't place "using namespace std;", "using std::vector;" or anything like this
into public library header files. Doing so would force the import of all or
parts of the "std" namespace upon all users of the library, even if they don't
-want it. Always fully qualify indentifiers in the headers.
+want it. Always fully qualify identifiers in the headers.
Definitions that are only used internally within the library but have to be
placed in a public header file for one reason or another should be put into