Movatterモバイル変換


[0]ホーム

URL:


Zum Inhalt springen
WikipediaDie freie Enzyklopädie
Suche

Funktionsprototyp

aus Wikipedia, der freien Enzyklopädie
Dieser Artikel behandelt das Konzept in Programmiersprachen. Zum Konzept beim technischen Prototypenbau siehePrototyp (Technik).

AlsFunktionsprototyp oderFunktionskopf bezeichnet man in verschiedenenProgrammiersprachen (vor allemC undC++) die Deklaration einerFunktion – inklusive Angaben über Anzahl undTyp derParameter und Typ des Rückgabewertes – getrennt von ihrerImplementierung (Definition). Man spricht auch ungenau von derVorausdeklaration (englisch:forward declaration, oft falsch als „Vorwärtsdeklaration“ übersetzt) einer Funktion, diese muss aber nicht in jedem Fall einen vollwertigen Funktionsprototypen darstellen. Beispiel:int funktion(); wäre in C eine gültige Vorausdeklaration, aber kein Prototyp, da keinerlei Angaben über Funktionsparameter gemacht werden. Jede Definition einer Funktion liefert hingegen automatisch immer auch eine Prototypdeklaration für nachfolgenden Programmcode.

Hintergrund

[Bearbeiten |Quelltext bearbeiten]

Mit Hilfe von Funktionsprototypen wird demCompiler dieSchnittstelle einer Funktion mitgeteilt, bevor diese verwendet wird. So kann der Compiler bei jedem Aufruf der Funktion überprüfen, ob die Funktionsparameter und der Rückgabewert konsistent verwendet werden. Die vollständige Implementierung einer Funktion kann so zu einem späteren Zeitpunkt oder in einem separaten Programmmodul erfolgen. Dieses Konzept ermöglicht auch den wechselseitigen Aufruf zweier oder mehrerer Funktionen (englisch:mutual recursion) sowie den Einsatz vonSingle-Pass-Compilern, die denQuelltext eines Programms in einem Durchgang übersetzen. Beim Entwurf vonPascal nutzteNiklaus Wirth solche bereits ausALGOL bekannten Vorausdeklarationen, um beim damaligen Stand der Compilertechnologie die Implementierung eines Single-Pass-Compilers zu ermöglichen.[1]

Verwendung

[Bearbeiten |Quelltext bearbeiten]

Funktionsprototypen können genutzt werden, um lediglich die Schnittstelleninformationen zur Verfügung zu stellen und die interne Realisierung verborgen zu halten. In diesem Fall unterstützen Funktionsprototypen das sogenannteGeheimnisprinzip. Funktionsprototypen und zugehörige Implementierungen werden dann getrennt gehalten. Veröffentlicht werden lediglich die Dateien mit den Funktionsprototypen. In dieser Form wurden Funktionsprototypen etwa in der SpracheModula-2 eingesetzt. In der SpracheObject Pascal 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.

Während z. B. in C++ Funktionsprototypen verwendet werden müssen,[2] ist dies in C nur in bestimmten Fällen zwingend vorgeschrieben:

  • Funktionen derC-Standardbibliothek dürfen nicht ohne Prototypen verwendet werden.
  • Für Funktionen, bei deren Aufruf die automatische Anpassung der Argumente(default argument promotion) zu den entsprechenden Parametern unpassende Datentypen liefern würde, sind Funktionsprototypen ebenfalls verpflichtend.

In diversen Richtlinien, beispielsweiseMISRA-C, wird die Verwendung von Funktionsprototypen zur Konsistenzprüfung gefordert.[3] InC99 wird die keinen Funktionsprototyp darstellende einfache Vorausdeklaration einer Funktion bereits als veraltet bezeichnet, was auf eine Entfernung dieser Variante in zukünftigen Versionen der Sprachnorm hinweist.[4]

Beispiel in C

[Bearbeiten |Quelltext bearbeiten]
// enthält unter anderem den Funktionsprototypen für printf():#include<stdio.h>// Prototypdeklaration, die Parameterbezeichner sind optional:doublesumme(doublezahl1,doublezahl2);intmain(void){// Aufruf der Funktion; ohne Funktionsprototyp wären hier// Argumenttyp (int) und Parametertyp (double) inkompatibel:printf("2+3=%g\n",summe(2,3));return0;}// Definition der Funktion:doublesumme(doublezahl1,doublezahl2){returnzahl1+zahl2;}

Siehe auch

[Bearbeiten |Quelltext bearbeiten]

Literatur

[Bearbeiten |Quelltext bearbeiten]
  • British Standards Institute (Hrsg.):The C Standard – Incorporating TC1 – BS ISO/IEC 9899:1999. John Wiley & Sons, 2003,ISBN 0-470-84573-2. 

Einzelnachweise

[Bearbeiten |Quelltext bearbeiten]
  1. Brian W. Kernighan: Why Pascal is Not My Favorite Programming Language. In: lysator.liu.se. 1981, abgerufen am 21. September 2010 (englisch). 
  2. Working Draft, Standard for Programming Language C++. (PDF; 4,6 MB) In: open-std.org. 19. Oktober 2005, abgerufen am 26. September 2010 (englisch, nicht-normatives Arbeitsdokument). 
  3. MISRA C Rules. (PDF; 129 kB) In: home.sogang.ac.kr. Archiviert vom Original (nicht mehr online verfügbar) am 22. Februar 2014; abgerufen am 7. Februar 2014 (englisch). 
  4. Rationale für C99, Revision 5.10. (PDF; 898 kB) In: open-std.org. April 2003, abgerufen am 12. September 2010 (englisch, Abschnitt 6.11.6). 
Abgerufen von „https://de.wikipedia.org/w/index.php?title=Funktionsprototyp&oldid=248126678
Kategorien:

[8]ページ先頭

©2009-2026 Movatter.jp