Funktionsprototyp
aus Wikipedia, der freien Enzyklopädie
Funktionsprototyp nennt man die Deklaration einer Funktion, wenn sie getrennt von der Implementierung erfolgt.
Funktionsprototypen werden in verschiedenen Programmiersprachen benutzt, um dem Compiler die Parameter und den Rückgabewert einer Funktion mitzuteilen. Funktionsprototypen zeigen damit lediglich die Schnittstelle einer Routine an, nicht jedoch deren Implementierung. Nach der Deklaration des Prototyps kann der Compiler bei jedem Aufruf der Funktion überprüfen, ob die Parameter und der Rückgabewert konsistent verwendet werden. So ist in dem angegebenen Beispiel ab der dritten Zeile festgelegt, dass Add2Val zwei Variablen vom Datentyp float entgegennimmt und als Rückgabewert auch float zurückgibt. Die vollständige Implementierung einer Funktion zu einem Funktionsprototyp kann daher zu einem späteren Zeitpunkt erfolgen. In diesem Fall nach dem Hauptprogramm, in dem die Funktion beim Aufruf von printf schon benutzt wird.
[Bearbeiten] Beispiel
#include <stdio.h>
// Funktionsprototyp float Add2Val(float, float); // Hauptprogramm int main(void) { printf("1.5 + 3.5 = %g\n", Add2Val(1.5, 3.5)); return 0; } // Funktionsdefinition float Add2Val(float Z1, float Z2) { return Z1 + Z2; }
In einigen Sprachen können Funktionsprototypen genutzt werden, um externen Entwicklern lediglich Schnittstelleninformationen zur Verfügung zu stellen und die interne Realisierung dennoch verborgen zu halten. In diesem Fall unterstützen Funktionsprototypen das so genannte Geheimnisprinzip. Funktionsprototypen und zugehörige Implementierungen werden dann getrennt gehalten. Entwickler, die keinen Zugriff auf Interna haben sollen, erhalten lediglich die Dateien mit den Funktionsprototypen. In dieser Form wurden Funktionsprototypen etwa in der Sprache Modula-2 eingesetzt. In der Sprache Delphi kann man durch das Eintragen von Prototypen in einem öffentlichen und einem geschützten Teil steuern, ob externe Objekte auf Interna zugreifen dürfen oder nicht. Auch dies dient dem Geheimnisprinzip. Während im ersten Fall eine Möglichkeit zum Verbergen von Interna vorliegt, dient das Konzept im zweiten Fall eher der Unterbindung von Zugriffen auf Interna.
In Sprachen wie C kann der Entwickler Funktionsprototypen angeben, muss es aber nicht, in C++ ist er dazu gezwungen. Hierbei handelt es sich ferner auch um eine Frage des Programmierstils. In diversen Richtlinien wie auch dem Standard MISRA 2004 wird beispielsweise die Angabe von Funktionsprototypen zur semantischen Überprüfung bzw. für Konsistenzprüfungen gefordert.