author | Raj Bhattacharjea <raj.b@gatech.edu> |
Mon, 14 May 2007 14:07:26 -0400 | |
changeset 625 | 12fa3d0c4f94 |
parent 138 | 9f3d43a400c1 |
permissions | -rw-r--r-- |
4
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1 |
\documentclass[11pt]{article} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
2 |
\usepackage{times} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
3 |
\setlength{\textwidth}{6.5in} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
4 |
\setlength{\textheight}{9in} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
5 |
\setlength{\oddsidemargin}{0.0in} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
6 |
\setlength{\evensidemargin}{0.0in} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
7 |
\setlength{\topmargin}{-0.5in} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
8 |
\def\nst{{\em ns--3}} |
5
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
9 |
\newcommand{\code}[1]{\texttt{#1}} |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
10 |
|
4
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
11 |
\begin{document} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
12 |
\begin{center} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
13 |
{\Large Coding Standard for ns--3}\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
14 |
August 22, 2005 |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
15 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
16 |
\end{center} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
17 |
\section{Introduction} |
5
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
18 |
|
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
19 |
The purpose of the \nst\ project is to build software which will last |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
20 |
many years: making sure that the code is readable and stays so is |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
21 |
one of the most important items required to achieve this goal. This |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
22 |
document thus outlines guidelines we plan to enforce on each component |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
23 |
integrated in \nst to ensure uniformity of the codebase which is |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
24 |
a first step towards readable code. |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
25 |
|
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
26 |
\section{Recommendations} |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
27 |
|
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
28 |
The following recommendations are not strict rules and some of them |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
29 |
are conflicting but the point here is to outline the fact that we |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
30 |
value more common-sense than strict adherence to the coding style |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
31 |
defined in this document. |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
32 |
|
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
33 |
\subsection{naming} |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
34 |
|
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
35 |
Types, methods, functions and variable names should be self-descriptive. |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
36 |
Avoid using acronyms, expand them, do not hesitate to use long names, |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
37 |
Avoid shortcuts such as \code{sz} for \code{size}. Long names sometimes get in the |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
38 |
way of being able to read the code: |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
39 |
\begin{verbatim} |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
40 |
for (int loopCount = 0; loopCount < max; loopCount++) |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
41 |
{ |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
42 |
// code |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
43 |
} |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
44 |
\end{verbatim} |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
45 |
loopCount should be renamed to something shorter such as |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
46 |
\code{i}, \code{j}, \code{k}, \code{l}, \code{m}, and \code{n} |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
47 |
which are widely used names which identify loop counters: |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
48 |
\begin{verbatim} |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
49 |
for (int i = 0; i < max; i++) |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
50 |
{ |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
51 |
// code |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
52 |
} |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
53 |
\end{verbatim} |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
54 |
Similarly, \code{tmp} is a common way to denote temporary variables. On |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
55 |
the other hand, \code{foo} is not an appropriate name: it says nothing |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
56 |
about the purpose of the variable. |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
57 |
|
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
58 |
If you use predicates (that is, functions, variables or methods |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
59 |
which return a single boolean value), prefix the |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
60 |
name with \code{is} or \code{has}. |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
61 |
|
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
62 |
\subsection{Memory management} |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
63 |
|
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
64 |
As much as possible, try to pass around objects |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
65 |
by value and allocate them on the stack. If you need to allocate |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
66 |
objects on the heap with new, make sure that the corresponding |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
67 |
call to delete happens where the new took place. i.e., avoid |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
68 |
passing around pointer ownership. |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
69 |
Avoid the use of reference counting and, more generaly, strive to |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
70 |
keep the memory-management model simple. |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
71 |
|
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
72 |
\subsection{Templates} |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
73 |
|
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
74 |
For now, templates are defined only in the simulator |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
75 |
core and are used everywhere else. Try to keep it that way by |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
76 |
avoiding defining new templates in model-specific code. |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
77 |
|
4
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
78 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
79 |
\section{Standards} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
80 |
\subsection{General} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
81 |
\begin{enumerate} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
82 |
\item There will be no {\em tab} characters in the code. Rather, repeated |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
83 |
spaces are used to separate the characters as needed. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
84 |
\item No line of code will be longer than 80 characters in length, to |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
85 |
prevent lines wrapping in the {\tt emacs} or {\tt vi} editors. For both |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
86 |
of these linux text editing tools, the default is a window that is |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
87 |
exactly 80 characters wide, so if none of the lines wrap when editing |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
88 |
in {\tt emacs} or {\tt vi} this requirement is met. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
89 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
90 |
\item Each C++ statement will be on a separate line. The only exception |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
91 |
is when an {\tt if}, {\tt else}, {\tt for} or {\tt while} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
92 |
statement has a single |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
93 |
statement sub--block these can be on the same line. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
94 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
95 |
Examples: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
96 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
97 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
98 |
int i = 0; // Right\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
99 |
i = 10; j = 20; // Wrong. Two statements same line\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
100 |
Sub1(k); Sub2(k); // Wrong. Two statements same line\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
101 |
if (done) break; // Right. If statement with single statement sub-block |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
102 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
103 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
104 |
\item Each variable declaration will be on a separate line. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
105 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
106 |
Examples: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
107 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
108 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
109 |
\begin{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
110 |
int c, d; \=// Wrong. c and d defined on same line.\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
111 |
int a = 0; \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
112 |
int b = 0; \>// Right. a and b on different lines\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
113 |
\end{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
114 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
115 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
116 |
\item Variables should be declared at the point in the code |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
117 |
where they are needed, and should be assigned an initial value |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
118 |
at the time of declaration. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
119 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
120 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
121 |
\begin{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
122 |
int a = 0; \=// Right, a is assigned in initial value.\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
123 |
int b; \> Wrong, b is not assigned an initial value.\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
124 |
int c = 0; \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
125 |
int d = Sub1(a, b);\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
126 |
c = Sub2(d); \> // Wrong, c should be declared here, not above |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
127 |
\end{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
128 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
129 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
130 |
\item Excepting when used in a {\tt switch} statement, the open |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
131 |
and close curly braces (\{ and \}) are always on a separate line. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
132 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
133 |
Examples: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
134 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
135 |
\begin{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
136 |
aa\=aa\=aa\= \kill |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
137 |
for (int i = 0; i < MAX\_COUNT; ++i) \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
138 |
\>\{ // Right. Open brace on separate line \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
139 |
\>\>sum += i; \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
140 |
\>\>prod *= i; \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
141 |
\>\} // Right. Close brace on separate line |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
142 |
\end{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
143 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
144 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
145 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
146 |
\begin{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
147 |
aa\=aa\=aa\= \kill |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
148 |
for (int i = 0; i < 10; ++i) \{ // Wrong. Open brace on same line\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
149 |
\>sum += i; \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
150 |
\>prod *= i; \} // Wrong. Close brace on same line |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
151 |
\end{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
152 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
153 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
154 |
\item The C++ {\tt goto} statement is not to be used. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
155 |
\end{enumerate} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
156 |
\subsection{Commenting} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
157 |
In general, comments should be use liberally throughout the program to |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
158 |
increase readability. Specifically: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
159 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
160 |
\begin{enumerate} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
161 |
\item C++ style comments using the {\tt //} delimeter |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
162 |
are to be used, rather than C style comments with the {\tt /*} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
163 |
and {\tt */} delimieters. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
164 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
165 |
\item Variable declaration should have a short, one or two line comment |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
166 |
describing the purpose of the variable, unless it is a |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
167 |
local variable whose use is obvious from the context. The short |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
168 |
comment should be on the same line as the variable declaration, unless it |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
169 |
is too long, in which case it should be on the preceding lines. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
170 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
171 |
Example: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
172 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
173 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
174 |
int averageGrade; // Computed average grade for this project \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
175 |
// Note. The above comment likely qualifies as \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
176 |
// obvious from context, and could be omitted. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
177 |
\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
178 |
// Counts the total number of students completing the project, but\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
179 |
// does not include those not turning in the project. \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
180 |
int projectCount = 0; |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
181 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
182 |
\item Every function should be preceded by a detailed comment block |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
183 |
describing what the function does, what the formal parameters are, and |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
184 |
what the return value is (if any). |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
185 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
186 |
\item Every class declaration should be preceded by a comment block |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
187 |
describing what the class is to be used for. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
188 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
189 |
\item Unless obvious from context, each {\tt if} statement should |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
190 |
include a one--line comment on the open curly brace following describing |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
191 |
the {\tt TRUE} condition and the {\tt FALSE} condition. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
192 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
193 |
Example: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
194 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
195 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
196 |
\begin{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
197 |
aa\=aa\=aa\= \kill |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
198 |
if (iter == students.end()) \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
199 |
\>\{ // Student not found, add him \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
200 |
\>\>students.push\_back(thisStudent); \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
201 |
\>\} \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
202 |
else \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
203 |
\>\{ // Student exists, modify existing data \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
204 |
\>\>iter->grade += thisGrade; \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
205 |
\>\} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
206 |
\end{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
207 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
208 |
\item Class and function comments should adhere to the Doxygen standard |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
209 |
format, for automated extraction by the Doxygen tool. {\em Note from |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
210 |
GFR. We need a bit more here, as Doxygen has several possible methods |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
211 |
for commenting. I'll look them over and suggest an approach, for later |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
212 |
discussion} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
213 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
214 |
\end{enumerate} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
215 |
\subsection{Naming Conventions} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
216 |
\begin{enumerate} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
217 |
\item {\bf Variable Names}. All variables, including global variables, |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
218 |
local variables, formal parameters, |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
219 |
and member variables in classes will start with a |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
220 |
lower case letter, and consist of only alphabetic characters and numeric |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
221 |
digits. Capital letters are to be used when appropriate between words |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
222 |
in a variable name for increased readability. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
223 |
Variable names should not contain the underscore character. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
224 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
225 |
Examples: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
226 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
227 |
{\tt int i;}\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
228 |
{\tt int nextIndexValue;}\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
229 |
{\tt int sum1;}\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
230 |
{\tt int loopCount10;} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
231 |
|
6
4a89c25520f1
add variable prefix
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
5
diff
changeset
|
232 |
\item {\bf Class Member and Global Variables}. To be able to distinguish |
4a89c25520f1
add variable prefix
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
5
diff
changeset
|
233 |
local variables from class member and global variables, prepend the |
4a89c25520f1
add variable prefix
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
5
diff
changeset
|
234 |
\code{m\_} prefix to class member variables and the \code{g\_} prefix |
4a89c25520f1
add variable prefix
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
5
diff
changeset
|
235 |
to global variables. |
4a89c25520f1
add variable prefix
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
5
diff
changeset
|
236 |
|
4a89c25520f1
add variable prefix
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
5
diff
changeset
|
237 |
Examples: |
4a89c25520f1
add variable prefix
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
5
diff
changeset
|
238 |
\begin{verbatim} |
4a89c25520f1
add variable prefix
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
5
diff
changeset
|
239 |
class Foo { |
4a89c25520f1
add variable prefix
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
5
diff
changeset
|
240 |
private: |
4a89c25520f1
add variable prefix
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
5
diff
changeset
|
241 |
int m_myPrivateVar; |
4a89c25520f1
add variable prefix
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
5
diff
changeset
|
242 |
}; |
4a89c25520f1
add variable prefix
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
5
diff
changeset
|
243 |
static int g_myGlobalVar; |
4a89c25520f1
add variable prefix
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
5
diff
changeset
|
244 |
\end{verbatim} |
4a89c25520f1
add variable prefix
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
5
diff
changeset
|
245 |
|
4
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
246 |
\item {\bf Subroutine Names}. All subroutine names, including global |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
247 |
routines and member functions in classes, will start with an upper case |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
248 |
letter, and consist of only alphabetic characters and numeric digits |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
249 |
(although digits should be rarely needed). |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
250 |
As in variable names, upper case letters are to be used between words as needed |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
251 |
to increase readability. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
252 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
253 |
Examples: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
254 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
255 |
{\tt int ComputeNextIterator()}\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
256 |
{\tt int Calculate()}\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
257 |
{\tt int TransmitPacket()}\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
258 |
{\tt int Dummy()} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
259 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
260 |
\item {\bf Defined Constants}. All defined constants will be all upper |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
261 |
case letters or numeric digits, with the underscore character separating |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
262 |
words. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
263 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
264 |
Examples: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
265 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
266 |
{\tt typedef enum \{ PACKET\_RX, PACKET\_FIRST\_BIT\_RX, PACKET\_TX\} }\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
267 |
{\tt \#define NUMBER\_ELEMENTS 10}\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
268 |
{\tt const int LOOP\_COUNT = 100} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
269 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
270 |
\item {\bf Defined Types}. All user defined types will end start with |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
271 |
an upper case letter, consist of upper and lower case letters only, and |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
272 |
end in {\tt \_t}. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
273 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
274 |
Examples: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
275 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
276 |
{\tt typedef double Time\_t; // Simulation time}\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
277 |
{\tt typedef unsigned long SimulatorUid\_t; // Unique ID for each event}\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
278 |
{\tt typedef unsigned long Event\_t; // Idenifies events in handler}\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
279 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
280 |
\item {\bf Class Names}. Class names will start with an upper case letter, |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
281 |
consist of only alphabetic characters, and include capital letters as |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
282 |
needed to increase readability. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
283 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
284 |
Examples: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
285 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
286 |
{\tt class DropTailQueue \{}\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
287 |
{\tt class Ferrari \{}\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
288 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
289 |
\end{enumerate} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
290 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
291 |
%\newpage % Adjust as needed |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
292 |
\subsection{Statement Formatting} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
293 |
\begin{enumerate} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
294 |
\item {\bf Indention}. The basic indention level for all code |
138
9f3d43a400c1
make coding style two space indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6
diff
changeset
|
295 |
is two character positions. |
4
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
296 |
\item {\bf Continuation statements}. Frequently a single statement |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
297 |
is too long to fit within a single 80 column line. In this case, the |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
298 |
statement is simply continued on the next one or more lines. Each |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
299 |
continuation line must be indented at least one--half indention level, |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
300 |
and more as necessary to increase readability. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
301 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
302 |
Examples: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
303 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
304 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
305 |
\begin{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
306 |
longVariableName = \=(anotherLongName * shorterName) + (loopIndex2 * i) + \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
307 |
\>(k * j); // Correct, indented for neatness |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
308 |
\end{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
309 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
310 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
311 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
312 |
\begin{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
313 |
a\=a\=a\= \kill |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
314 |
for (LongTypeName\_t longLoopIndexName = aLongExpression; \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
315 |
\>longLoopIndexName < MAX\_VALUE; \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
316 |
\>longLoopIndexName++) // Wrong, continuations not indented far enough |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
317 |
\end{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
318 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
319 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
320 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
321 |
\begin{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
322 |
for (\=LongTypeName\_t longLoopIndexName = aLongExpression; \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
323 |
\>longLoopIndexName < MAX\_VALUE; \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
324 |
\>longLoopIndexName++) // Right, indented for readability |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
325 |
\end{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
326 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
327 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
328 |
\item {\bf {\tt IF} Statements}. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
329 |
The open curly brace following an {\tt IF} statement must be on the |
138
9f3d43a400c1
make coding style two space indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6
diff
changeset
|
330 |
following line, indented by one indention level. |
9f3d43a400c1
make coding style two space indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6
diff
changeset
|
331 |
The subsequent lines must be |
9f3d43a400c1
make coding style two space indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6
diff
changeset
|
332 |
indented by an additional one indention level. |
9f3d43a400c1
make coding style two space indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6
diff
changeset
|
333 |
The {\tt ELSE} statement (if present) |
4
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
334 |
must be on a line by itself. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
335 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
336 |
Examples: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
337 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
338 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
339 |
\begin{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
340 |
aa\=aa\=aa\= \kill |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
341 |
if (someCondition) \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
342 |
\>\{ // Describe TRUE condition here\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
343 |
\>\>i = k;\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
344 |
\>\>k = i + 2;\\ |
138
9f3d43a400c1
make coding style two space indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6
diff
changeset
|
345 |
\>\} // Right, curly block indented one indent level, statements one indent more |
4
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
346 |
\end{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
347 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
348 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
349 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
350 |
\begin{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
351 |
aa\=aa\=aa\= \kill |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
352 |
if (someCondition) \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
353 |
\>\{ // Describe TRUE condition here\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
354 |
\>\>i = k;\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
355 |
\>\>k = i + 2;\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
356 |
\>\} \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
357 |
else // Right, ELSE statement on separate line, same indent as IF \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
358 |
\>\{ // Describe FALSE condition here\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
359 |
\>\>i = k * 2; \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
360 |
\>\>k = i + 4; \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
361 |
\>\} // Right, closing curly brace lined up with open brace |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
362 |
\end{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
363 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
364 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
365 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
366 |
\begin{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
367 |
aa\=aa\=aa\= \kill |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
368 |
if (someCondition) // Describe TRUE condition here\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
369 |
\>i = k; // Right, single line block need not have curly braces \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
370 |
\end{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
371 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
372 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
373 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
374 |
\item {\bf {\tt FOR} Statements}. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
375 |
The open brace following a {\tt for} statement is indented |
138
9f3d43a400c1
make coding style two space indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6
diff
changeset
|
376 |
one level from the {\tt for} statement itself. Each statement |
9f3d43a400c1
make coding style two space indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6
diff
changeset
|
377 |
in the sub--block is indented one level from the curly brace. |
4
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
378 |
If the sub--block is a single statement, the curly braces can be |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
379 |
omitted and the statement indented one level, or optionally appear |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
380 |
on the same line as the {\tt for} statement. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
381 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
382 |
Example: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
383 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
384 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
385 |
\begin{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
386 |
aa\=aa\=aa\= \kill |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
387 |
for (int i = 0; i < MAX\_COUNT; ++i) \\ |
138
9f3d43a400c1
make coding style two space indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6
diff
changeset
|
388 |
\>\{ // Curly brace indented one level \\ |
9f3d43a400c1
make coding style two space indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6
diff
changeset
|
389 |
\>\>sum += i; // Statements indented another one level \\ |
4
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
390 |
\>\>prod *= i; \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
391 |
\>\} // Close brace on same column as open brace \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
392 |
\end{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
393 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
394 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
395 |
\item {\bf {\tt WHILE} Statements}. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
396 |
{\tt While} statements are formatted similarly to {\tt IF} statements, |
138
9f3d43a400c1
make coding style two space indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6
diff
changeset
|
397 |
with curly braces indented one level on separate lines, and the |
9f3d43a400c1
make coding style two space indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6
diff
changeset
|
398 |
inner statements indented another level. If the sub--block has only |
4
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
399 |
a single line, the curly braces can be omitted, and the statement may |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
400 |
appear on the same line as the {\tt WHILE} statement. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
401 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
402 |
Examples: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
403 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
404 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
405 |
\begin{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
406 |
aa\=aa\=aa\= \kill |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
407 |
while (someCondition) \\ |
138
9f3d43a400c1
make coding style two space indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6
diff
changeset
|
408 |
\>\{ // Right, open brace indented one level \\ |
9f3d43a400c1
make coding style two space indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6
diff
changeset
|
409 |
\>\>i = k; // Right, statements indented one level from open brace \\ |
4
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
410 |
\>\>k = i + 2;\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
411 |
\>\} // Right, close brace lines up with open brace |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
412 |
\end{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
413 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
414 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
415 |
\item {\bf Infinite Loops}. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
416 |
Any loop intended to be infinite (of course with a {\tt break} statement |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
417 |
somewhere) should be of the form: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
418 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
419 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
420 |
while(true) \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
421 |
{ // Loop until sentinel found\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
422 |
...code here \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
423 |
} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
424 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
425 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
426 |
\item {\bf {\tt SWITCH} Statements}. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
427 |
The open curly brace for a {\tt switch} statement will be on the same |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
428 |
line as the {\tt switch} statement itself. Each {\tt case} statement |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
429 |
following is indented two columns from the switch statement. Each |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
430 |
statement in the {\tt case} block is indented two column from the |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
431 |
{\tt case} statement. The closing curly brace is on a separate line |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
432 |
by itself, indented two columns from the {\tt switch} statement. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
433 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
434 |
Example: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
435 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
436 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
437 |
\begin{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
438 |
aa\=aa\=aa\= \kill |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
439 |
switch(someCondition) \{ Right, open brace on same line as switch\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
440 |
\>case 0 : // Right, case indented two columns from switch\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
441 |
\>\>i = k; // Right, statements indented two columns from case \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
442 |
\>\>k = i + 2;\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
443 |
\>\>break;\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
444 |
\>case 1 : // Right, case indented two columns from switch\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
445 |
\>\>i = k + 2; // Right, statements indented two columns from case \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
446 |
\>\>k = i + 4;\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
447 |
\>\>break;\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
448 |
\>\} // Right, close brace lines up with case statements |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
449 |
\end{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
450 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
451 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
452 |
\item {\bf Functions}. Since C and C++ do not allow nested functions, |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
453 |
all functions start with no indentation at column 0. The open curly |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
454 |
brace is on a line by itself immediately following the function header |
138
9f3d43a400c1
make coding style two space indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6
diff
changeset
|
455 |
and formal parameters, also in column 0. |
4
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
456 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
457 |
Example: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
458 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
459 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
460 |
\begin{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
461 |
aa\=aa\=aa\=aa\= \kill |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
462 |
void Function1(int arg1, double arg2)\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
463 |
\{ // Right, curly brace at column 0\\ |
138
9f3d43a400c1
make coding style two space indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6
diff
changeset
|
464 |
\>int local1 = 0; // Right, local variable at column 2\\ |
9f3d43a400c1
make coding style two space indent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6
diff
changeset
|
465 |
\>int local2;\\ |
4
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
466 |
\>\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
467 |
\>local2 = local1 + arg1 + arg2; // Right, indented two columns\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
468 |
\>int local3; // Right, variable at same level\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
469 |
\>local3 = Function2(local2);\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
470 |
\>if (someCondition)\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
471 |
\>\>\{\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
472 |
\>\>\>local3 = 0;\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
473 |
\>\>\>local2 = local1;\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
474 |
\>\>\>int local4 = local1 + 1; // Right, variable at same level\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
475 |
\>\>\>Function3(local4);\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
476 |
\>\>\}\\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
477 |
\} // Right, close brace at column 0 |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
478 |
\end{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
479 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
480 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
481 |
\item {\bf Expressions}. Spaces should be used liberally in expressions |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
482 |
to increase readability. One space before and after each operator, |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
483 |
excepting the increment and decrement operators, leads to easy--to--read |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
484 |
expressions. Continued expressions should be indented as far as needed |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
485 |
for neatness and readability. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
486 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
487 |
Examples: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
488 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
489 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
490 |
i = k * 2 + 3 / var1++; // Right, spacing separating terms \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
491 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
492 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
493 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
494 |
i = k*2+2/var1++; // Wrong, crowded together and hard to read |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
495 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
496 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
497 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
498 |
\begin{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
499 |
someLongVariableName = \=anotherLongVariableName * shorterName + \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
500 |
\>anotherName; // Right, indented to line up |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
501 |
\end{tabbing} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
502 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
503 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
504 |
\end{enumerate} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
505 |
\subsection{Header Files} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
506 |
\begin{enumerate} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
507 |
\item All header files will have a file name ending with {\tt .h}. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
508 |
\item All header files should have a one line comment describing |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
509 |
the purpose of the header, and comments identifying the |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
510 |
author and the (approximate) date the file was created. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
511 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
512 |
Example: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
513 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
514 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
515 |
// ns3 Network Simulator - TCP Base Class Declaration \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
516 |
// George F. Riley. riley@ece.gatech.edu. \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
517 |
// Georgia Tech, Fall 2006 |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
518 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
519 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
520 |
\item All header files should have an ``include guard'' to prevent accidental |
5
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
521 |
inclusion of the file multiple times in a single compilation unit. The include |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
522 |
guard should be named after the file name. If the file name is \code{foo-bar.h}, then the |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
523 |
include guard should be named \code{FOO\_BAR\_H} |
4
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
524 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
525 |
Example: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
526 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
527 |
\begin{tt} |
5
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
528 |
\#ifndef FOO\_BAR\_H \\ |
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
529 |
\#define FOO\_BAR\_H \\ |
4
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
530 |
|
5
df268610ad73
integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4
diff
changeset
|
531 |
// (Contents of foo-bar.h here |
4
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
532 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
533 |
\#endif |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
534 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
535 |
\item Header files should avoid including other files whenever possible. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
536 |
This can often be avoided with judicious use of the |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
537 |
{\tt class ClassName;} forward declaration. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
538 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
539 |
Example: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
540 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
541 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
542 |
// excerpt from application.h \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
543 |
class L4Protocol; \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
544 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
545 |
class Application \{ \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
546 |
.... \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
547 |
AddL4Proto(const L4Protocol\&); \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
548 |
.... \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
549 |
L4Protocol* l4Proto; \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
550 |
\}; |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
551 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
552 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
553 |
In the above example, the use of the forward declaration for {\tt L4Protocol} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
554 |
obviates the need to include {\tt l4proto.h} in the application header |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
555 |
file. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
556 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
557 |
\end{enumerate} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
558 |
\subsection{Source Code Files} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
559 |
\begin{enumerate} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
560 |
\item All souce code files will have a file name ending with {\tt .cc}. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
561 |
\item All source code files should have a one line comment describing |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
562 |
the purpose of the code, and comments identifying the |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
563 |
author and the (approximate) date the file was created. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
564 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
565 |
Example: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
566 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
567 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
568 |
// ns3 Network Simulator - TCP Base Class Implementation \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
569 |
// George F. Riley. riley@ece.gatech.edu. \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
570 |
// Georgia Tech, Fall 2006 |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
571 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
572 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
573 |
\item All {\tt \#include} directives should be grouped with {\em system} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
574 |
files listed first (eg. {\tt \#include <iostream>}), followed by |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
575 |
\nst\ defined files (eg. {\tt \#include "tcp.h"}). Within a group, |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
576 |
the includes should be sorted in alphabetical order. |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
577 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
578 |
Example: |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
579 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
580 |
\begin{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
581 |
\#include <iostream> \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
582 |
\#include <list> \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
583 |
\#include <vector> \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
584 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
585 |
\#include "application.h" \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
586 |
\#include "dumbbell.h" \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
587 |
\#include "simulator.h" \\ |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
588 |
\#include "tcp.h.h" |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
589 |
|
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
590 |
\end{tt} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
591 |
\end{enumerate} |
287d6f27ee2d
george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
592 |
\end{document} |