\begin{slide}{Parameter-Übergabe (Semantik)}

Datenaustausch zw. Aufrufer (caller) und Aufgerufenem (callee):
über globalen Speicher 
\begin{verbatim}
#include <errno.h>
extern int errno;
\end{verbatim}
oder über Parameter.

Datentransport (entspr. Schüsselwörtern in Ada)
\begin{itemize}
\item in: (Argumente) vom Aufrufer zum Aufgerufenen
\item out: (Resultate) vom Aufgerufenen zum Aufrufer
\item in out: in beide Richtungen
\end{itemize}

\end{slide}

\begin{slide}{Parameter-Übergabe (Implementierungen)}

\begin{itemize} 
\item
  pass-by-value (Wert)
\item
  copy in/copy out (Wert)
\item
  pass-by-reference (Verweis)
\item
  pass-by-name (textuelle Substitution)

  selten \dots Algol68, CPP-Macros \dots Vorsicht!
\end{itemize}

\end{slide}

\begin{slide}{Parameterübergabe}
häufig benutzte Implementierungen:
\begin{itemize}
\item
  Pascal: by-value (default) oder by-reference (VAR)
\item
  C: by-value (Verweise ggf. selbst herstellen)
\item 
  C++ unterscheidet zwischen Zeigern (*, wie in C)
  und Referenzen (\&, verweisen immer auf die gleiche Stelle,
  werden automatisch dereferenziert)
\item
  Java: primitive Typen 
  \emph{und} Referenz-Typen ($=$ Verweise auf Objekte) by-value
\end{itemize}

\end{slide}

%%% Local Variables: 
%%% mode: latex
%%% TeX-master: "compilerbau"
%%% End: 
