doc/codingstd.tex
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Fri, 25 Aug 2006 09:59:09 +0200
changeset 6 4a89c25520f1
parent 5 df268610ad73
child 138 9f3d43a400c1
permissions -rw-r--r--
add variable prefix
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   295
is four character positions.  In some cases, indention to ``one--half''
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   296
level, is required as described below.
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   297
\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
   298
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
   299
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
   300
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
   301
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
   302
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   303
Examples:
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   304
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   305
\begin{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   306
\begin{tabbing}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   307
longVariableName = \=(anotherLongName * shorterName) + (loopIndex2 * i) + \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   308
\>(k * j); // Correct, indented for neatness
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   309
\end{tabbing}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   310
\end{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   311
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   312
\begin{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   313
\begin{tabbing}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   314
a\=a\=a\= \kill
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   315
for (LongTypeName\_t longLoopIndexName = aLongExpression; \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   316
\>longLoopIndexName < MAX\_VALUE; \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   317
\>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
   318
\end{tabbing}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   319
\end{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   320
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   321
\begin{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   322
\begin{tabbing}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   323
for (\=LongTypeName\_t longLoopIndexName = aLongExpression; \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   324
\>longLoopIndexName < MAX\_VALUE; \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   325
\>longLoopIndexName++) // Right, indented for readability
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   326
\end{tabbing}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   327
\end{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   328
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   329
\item {\bf {\tt IF} Statements}.
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   330
The open curly brace following an {\tt IF} statement must be on the
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   331
following line, indented by one--half indention level.
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   332
The subsequent lines must
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   333
indented an additional one--half indention level.
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   334
{\tt IF} statements with only
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   335
one statement in either the {\tt TRUE} of {\tt FALSE} sub--blocks
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   336
may omit the curly braces.  The {\tt ELSE} statement (if present)
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   337
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
   338
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   339
Examples:
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   340
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   341
\begin{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   342
\begin{tabbing}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   343
aa\=aa\=aa\= \kill
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   344
if (someCondition) \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   345
\>\{ // Describe TRUE condition here\\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   346
\>\>i = k;\\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   347
\>\>k = i + 2;\\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   348
\>\} // Right, curly block indented one-half, statements one-half more
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   349
\end{tabbing}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   350
\end{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   351
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   352
\begin{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   353
\begin{tabbing}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   354
aa\=aa\=aa\= \kill
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   355
if (someCondition) \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   356
\>\{ // Describe TRUE condition here\\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   357
\>\>i = k;\\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   358
\>\>k = i + 2;\\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   359
\>\} \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   360
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
   361
\>\{ // Describe FALSE condition here\\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   362
\>\>i = k * 2; \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   363
\>\>k = i + 4; \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   364
\>\}   // 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
   365
\end{tabbing}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   366
\end{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   367
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   368
\begin{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   369
\begin{tabbing}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   370
aa\=aa\=aa\= \kill
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   371
if (someCondition) // Describe TRUE condition here\\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   372
\>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
   373
\end{tabbing}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   374
\end{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   375
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   376
\begin{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   377
if (someCondition) i = k; // Right, single statement may be on same line
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   378
\end{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   379
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   380
\item {\bf {\tt FOR} Statements}.
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   381
The open brace following a {\tt for} statement is indented
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   382
one-half level from the {\tt for} statement itself.  Each statement
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   383
in the sub--block is indented one--half level from the curly brace.
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   384
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
   385
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
   386
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
   387
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   388
Example:
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   389
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   390
\begin{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   391
\begin{tabbing}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   392
aa\=aa\=aa\= \kill
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   393
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
   394
\>\{             // Curly brace indented one-half level \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   395
\>\>sum += i;    // Statements indented another one-half level \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   396
\>\>prod *= i;                                          \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   397
\>\}             // 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
   398
\end{tabbing}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   399
\end{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   400
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   401
\begin{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   402
for (int i = 0; i < MAX\_COUNT; ++i) Sub1(i); // Right, single statement\\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   403
\end{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   404
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   405
\item {\bf {\tt WHILE} Statements}.
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   406
{\tt While} statements are formatted similarly to {\tt IF} statements,
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   407
with curly braces indented one-half level on separate lines, and the
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   408
inner statements indented another half-level. If the sub--block has only
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   409
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
   410
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
   411
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   412
Examples:
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   413
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   414
\begin{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   415
\begin{tabbing}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   416
aa\=aa\=aa\= \kill
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   417
while (someCondition) \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   418
\>\{ // Right, open brace indented one-half level \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   419
\>\>i = k; // Right, statements indented one-half level from open brace \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   420
\>\>k = i + 2;\\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   421
\>\}       // 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
   422
\end{tabbing}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   423
\end{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   424
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   425
\begin{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   426
while (someCondition) i = i + 2; // Right, single stmt on same line
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   427
\end{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   428
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   429
\item {\bf Infinite Loops}.
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   430
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
   431
somewhere) should be of the form:
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   432
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   433
\begin{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   434
while(true) \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   435
  { // Loop until sentinel found\\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   436
    ...code here \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   437
  }
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   438
\end{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   439
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   440
\item {\bf {\tt SWITCH} Statements}.
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   441
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
   442
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
   443
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
   444
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
   445
{\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
   446
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
   447
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   448
Example:
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   449
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   450
\begin{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   451
\begin{tabbing}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   452
aa\=aa\=aa\= \kill
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   453
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
   454
\>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
   455
\>\>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
   456
\>\>k = i + 2;\\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   457
\>\>break;\\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   458
\>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
   459
\>\>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
   460
\>\>k = i + 4;\\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   461
\>\>break;\\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   462
\>\}       // 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
   463
\end{tabbing}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   464
\end{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   465
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   466
\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
   467
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
   468
brace is on a line by itself immediately following the function header
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   469
and formal parameters, also in column 0.  Any local variable declarations
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   470
immediately following the open curly brace also start at column 0.
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   471
One blank line follows the initial local variable declarations (if any).
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   472
The statements in the function body are indented one-half  level 
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   473
from the curly brace.  Any variable declarations after the start of the
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   474
statements are indented at the same level as the preceding statement.
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   475
The closing brace is at column 0.
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
Example:
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   478
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   479
\begin{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   480
\begin{tabbing}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   481
aa\=aa\=aa\=aa\= \kill
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   482
void Function1(int arg1, double arg2)\\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   483
\{               // Right, curly brace at column 0\\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   484
int local1 = 0;  // Right, local variable at column 0\\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   485
int local2;\\
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
\>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
   488
\>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
   489
\>local3 = Function2(local2);\\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   490
\>if (someCondition)\\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   491
\>\>\{\\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   492
\>\>\>local3 = 0;\\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   493
\>\>\>local2 = local1;\\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   494
\>\>\>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
   495
\>\>\>Function3(local4);\\
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
\}               // Right, close brace at column 0
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   498
\end{tabbing}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   499
\end{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   500
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   501
\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
   502
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
   503
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
   504
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
   505
for neatness and readability.
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   506
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   507
Examples:
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   508
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   509
\begin{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   510
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
   511
\end{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   512
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   513
\begin{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   514
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
   515
\end{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   516
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   517
\begin{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   518
\begin{tabbing}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   519
someLongVariableName = \=anotherLongVariableName * shorterName + \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   520
\>anotherName;  // Right, indented to line up
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   521
\end{tabbing}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   522
\end{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   523
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   524
\end{enumerate}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   525
\subsection{Header Files}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   526
\begin{enumerate}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   527
\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
   528
\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
   529
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
   530
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
   531
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   532
Example:
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   533
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   534
\begin{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   535
// 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
   536
// 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
   537
// Georgia Tech, Fall 2006
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   538
\end{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   539
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   540
\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
   541
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
   542
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
   543
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
   544
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   545
Example:
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
\begin{tt}
5
df268610ad73 integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4
diff changeset
   548
\#ifndef FOO\_BAR\_H  \\
df268610ad73 integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4
diff changeset
   549
\#define FOO\_BAR\_H \\
4
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   550
5
df268610ad73 integrate text from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4
diff changeset
   551
// (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
   552
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   553
\#endif
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   554
\end{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   555
\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
   556
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
   557
{\tt class ClassName;} forward declaration.  
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   558
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   559
Example:
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   560
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   561
\begin{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   562
// excerpt from application.h \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   563
class L4Protocol; \\
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
class Application \{ \\
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
 AddL4Proto(const L4Protocol\&); \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   568
 .... \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   569
 L4Protocol* l4Proto; \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   570
\};
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
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
   574
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
   575
file.
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   576
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   577
\end{enumerate}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   578
\subsection{Source Code Files}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   579
\begin{enumerate}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   580
\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
   581
\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
   582
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
   583
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
   584
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   585
Example:
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   586
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   587
\begin{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   588
// 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
   589
// 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
   590
// Georgia Tech, Fall 2006 
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   591
\end{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   592
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   593
\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
   594
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
   595
\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
   596
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
   597
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   598
Example:
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   599
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   600
\begin{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   601
\#include <iostream> \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   602
\#include <list> \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   603
\#include <vector> \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   604
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   605
\#include "application.h" \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   606
\#include "dumbbell.h" \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   607
\#include "simulator.h" \\
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   608
\#include "tcp.h.h"
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   609
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   610
\end{tt}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   611
\end{enumerate}
287d6f27ee2d george's draft of a coding std
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   612
\end{document}