%*
%* Copyright (c) 2007 by Lukas Ruf (lukas.ruf@lpr.ch)
%*
%* Create: 2007-01-30:1703G
%* Modify: 2007-01-30:1704
%* Commit: $Id: originalproblem.tex 272 2007-03-06 21:45:29Z ruf $
%*

\chapter{\label{ccconventions}Konventionen des Code Cleanup}
\textbf{Initialisierung der Variablen}\\
\emph{Jede} Variable muss bei der Definition initialisiert werden.\\
Beispiel:
\begin{verbatim}int foo(int x)
{
  int y = 0;  // <--- Diese Initialisierung ist obligatorisch
  ...
  y = -1;
  ...
  return y;
}\end{verbatim}

\textbf{Einrückung}\\
Der TOPSY-Source Code verwendet die sogenannte \emph{Tab Expansion}. Ein Tabulator entspricht zwei Leerschlägen.\\

\textbf{Klammern}
\begin{itemize}
	\item \emph{Öffnende Klammern}\\
	Öffnende Klammern stehen immer auf einer eigenen Zeile, auf der Höhe der Einrückung der vorhergehenden Zeile.
	\item \emph{Schliessende Klammern}\\
	Schliessende Klammern stehen immer auf einer eigenen Zeile, auf der Höhe der Einrückung der zugehörigen öffnenden Klammer.
	\item \emph{Einrückung}\\
	Die Einrückung folgt dem \emph{cindent}-Modus des Editors vim. Die Einrückungstiefe entspricht dabei einem Tabulator oder zwei Leerschlägen.
\end{itemize}

\textbf{Funktionsdefinitionen}\\
Wir verzichten auf den Kernighan \& Ritchie-Stil und führen alle Statements im Funktionsheader auf.\\
Beispiel:
\begin{verbatim}int main(int argc, char **argv, char **envp)
{
  if (argc > 0)
    return 1;
  else
    return 0;
  return 0;
}

\end{verbatim}

\textbf{Typedefs und Structs}
\begin{itemize}
	\item Der Name eines Typedefs endet immer mit \texttt{\_t}.
	\item Der Name eines Structs endet immer mit \texttt{\_s}.
\end{itemize}

Beispiel:
\begin{verbatim}typedef struct vm_map_s 
{
  ...
} vm_map_t;

vm_map_t vm_map;

struct mm_map_s 
{
  ...
} mm_map;\end{verbatim}

\textbf{Einfache Variablentypen}\\
In TOPSY werden ausschliesslich die folgenden einfachen Variablentypen eingesetzt. Falls der Speicherbedarf eine Rolle spielt, wird der Bit Counter ans Ende gestellt.\\
Die folgende Liste enthält alle zulässigen einfachen Variablentypen: 
\begin{itemize}
  \item \texttt{uint8} \\
      8 bit vorzeichenloser Integer
    \item \texttt{uint16} \\
      16 bit vorzeichenloser Integer
    \item \texttt{uint32} \\
      32 bit vorzeichenloser Integer
    \item \texttt{uint64} \\
      64 bit vorzeichenloser Integer
    \item \texttt{int8} \\
      8 bit vorzeichenbehafteter Integer
    \item \texttt{int16} \\
      16 bit vorzeichenbehafteter Integer
    \item \texttt{int32} \\
      32 bit vorzeichenbehafteter Integer
    \item \texttt{int64} \\
      64 bit vorzeichenbehafteter Integer
    \item \texttt{size\_t} \\
      Variablentyp für die Aufnahme der Grösse von Speicherbereichen
    \item \texttt{offset\_t} \\
      Variablentyp für die Aufnahme von Offsets
    \item \texttt{address\_t} \\
      Variablentyp für die Aufnahme von Speicheradressen
    \item \texttt{char} \\
      gewöhnlicher vorzeichenbehafteter Char
    \item \texttt{short} \\
      gewöhnlicher vorzeichenbehafteter Short Integer
    \item \texttt{int} \\
      gewöhnlicher vorzeichenbehafteter Integer
    \item \texttt{long} \\
      gewöhnlicher vorzeichenbehafteter Long Integer
    \item \texttt{long long} \\
      gewöhnlicher vorzeichenbehafteter Long Long Integer
    \item \texttt{unsigned char} \\
      gewöhnlicher vorzeichenloser Char
    \item \texttt{unsigned short} \\
      gewöhnlicher vorzeichenloser Short Integer
    \item \texttt{unsigned int} \\
      gewöhnlicher vorzeichenloser Integer
    \item \texttt{unsigned long} \\
      gewöhnlicher vorzeichenloser Long Integer
    \item \texttt{unsigned long long} \\
      gewöhnlicher vorzeichenloser Long Long Integer
    \item \texttt{boolean} \\
      binärer Boole'scher Variablentyp
\end{itemize}

\textbf{Makros und \#defines}
\begin{itemize}
	\item verwenden ausschliesslich Grossbuchstaben. Ausnahmen sind nur für üblicherweise kleingeschriebene Registernamen und Makros für einzelne Assemblerinstruktionen erlaubt.
	\item einfache Makros müssen in öffnende und schliessende Klammern gesetzt werden
	\item bei der Verwendung von Inline-Funktionen müssen diese mit 
	\begin{verbatim}do { ... } while(0);\end{verbatim}
eingefasst werden
\end{itemize}


