Auslagerungszweck compilierter Funktionen: Funktionen werden ausgelagert (in Laufzeitbibliotheken), um diese speicherplatzsparend von mehreren Prozessen benutzen zu können.
Der Code ist dabei einmalig im RAM Speicher des Systems und wird dynamisch an den jeweiligen ausführenden Prozess (Instanz) gebunden und nicht per statischem Binden in jeder Programmdatei eingebunden, die diese Funktionen einer Bibliothek verwendet (Programm_XY_1.exe Programm_XY_2.exe usw)
Auslagerung von Funktionsprototypen:
1) Headerdateien (*.h) beinhalten Funktionsprototypen allgemeiner Funktionen. 2) Spezielle Funktionensprototypen werden gemeinsam mit ihren dazugehörigen Funktionen in Sourcecodedateien integriert (*.c, *.cpp).
Es handelt sich im ersten Fall um API Schnittstellenfunktionsprototypen bzw. Programmfunktionsprototypen (im Regelfall) und im zweiten Fall um programminterne Funktionen und ihre Definitionen (=Prototypen).
Der Prototyp einer Funktion wird vorab vor allen Funktionskörpern und Funktionsaufrufen in einer Sourcecodedatei direkt oder per Verweis auf eine Headerdatei mittels include benötigt, um jeden Parameter eines Aufrufs einer Funktion auf seinen Typ zu prüfen und bei mangelnder Übereinstimmung eine Warnung oder eine Fehlermeldung während der Compilierung auszugeben.
Beispiel:
Code:
/* Prototyp */
unsigned long f1 (int low, int high);
/* Funktionskörper */
unsigned long f1 (int low, int high)
{
return (unsigned long)low + (unsigned long)high << 16;
}
oder
Code:
/* Typdefinition für vorzeichnlosen 32bit Wert */
typedef unsigned long ul;
/* Prototyp */
ul f1 (int low, int high);
/* Funktionskörper */
ul f1 (int low, int high)
{
return (ul)low + (ul)high << 16;
}