Warum Funktionsprototypen?

8

Warum Funktionsprototypen in C verwenden? Es scheint irgendwie redundant zu sein, da wir den Funktionsnamen, die Argumenttypen und den Rückgabetyp bereits in der Definition deklarieren. Müssen die Prototypen deklariert werden, bevor die Funktion definiert oder für die Optimierungen verwendet wird?

    
George Newton 10.02.2014, 06:45
quelle

3 Antworten

9

Im Allgemeinen müssen Funktionen nicht explizit deklariert werden, da sie bei der Definition auch deklariert werden. Hier sind zwei Situationen, in denen Sie müssen:

  1. Die Definition der Funktion erfolgt in einem externen Modul.

    Wenn die Funktion beispielsweise in foo.c definiert ist, Sie sie jedoch von bar.c aus aufrufen möchten, müssen Sie die Funktion in bar.c oder eine von ihr eingeschlossene Datei deklarieren (normalerweise foo.h ).

  2. Die Definition der Funktion erfolgt nach einem Aufruf an sie.

    Wenn Sie beispielsweise zwei Funktionen haben, die sich gegenseitig aufrufen, müssen Sie die zweite vor der Definition der ersten deklarieren.

ikegami 10.02.2014, 06:52
quelle
1

Während eine Funktionsdefinition angibt, was eine Funktion tut, kann man sich einen Funktionsprototyp so vorstellen, dass er seine Schnittstelle spezifiziert.

Erstellen von Bibliotheksschnittstellen: Durch Platzieren von Funktionsprototypen in einer Headerdatei kann eine Schnittstelle für eine Bibliothek angegeben werden.     
Zhen Zhang 10.02.2014 06:52
quelle
1

Mit der Deklaration einer Funktion kann der Compiler die konsistente Verwendung von Parametern und Rückgabewerten prüfen und den Code übersetzen, auch wenn die Funktion in diesem Modul nicht implementiert ist. Wenn die Funktion nur deklariert, aber nicht im jeweiligen Modul implementiert ist, wird diese Lücke vom Linker und nicht vom Compiler geschlossen.

Es ähnelt der Deklaration externer Variablen. Wenn Sie sie definieren würden, würde der Speicher für sie mehrere Male zugewiesen werden. Deshalb sollten Sie niemals Variablen in h-Dateien definieren, sondern sie dort deklarieren. Das Einschließen der h-Datei würde zu Mehrfachzuweisungen von Speicher führen.

    
Lord_Gestalter 10.02.2014 07:01
quelle

Tags und Links