Verwenden einer Funktion in C-Programmierung Prototype

Was passiert, wenn Sie nicht über Prototypen? Wie bei allem in der C-Programmierung, wenn Sie faulenzen auf, kann der Compiler oder Linker wissen Sie mit einer Fehlermeldung - oder das Programm läuft einfach nicht richtig. Es ist nicht das Ende der Welt - nein, nicht wie ein Militärroboterprogrammierung oder genetischen Code für eine neue Art von Venusfliegenfalle zu entwerfen.

BASIC FUNCTION- NO RETURN

# include Leere prompt () - / * Funktionsprototyp * / int main () {int loop-char-Eingang [32] -loop = 0-while (looplt; 5) {prompt () - fgets (Eingang, 31, stdin) -loop = Schleife + 1-} return (0) -} / * Display prompt * / void prompt () {printf ( "C: DOS>") -}

Übung 1: Ändern Sie den Quellcode von Basisfunktionen haben No Return. Kommentar outthe Prototyp von der Linie 3. Erstellen Sie das Ergebnis.

Compiler-Fehler sind wunderbare Dinge, herrlich präzise noch völlig rätselhaft. Hier ist die Fehlermeldung von Code :: Blocks, obwohl nur die relevanten Teile der Nachricht:

13 Warnung: implizite Deklaration der Funktion 'prompt'23 Achtung: widersprüchliche Arten für' prompt'13 Achtung: vorherige implizite Deklaration von 'prompt' war hier

Die erste Warnung erfolgt bei Linie 13 in der Quellcodedatei, in der die Eingabeaufforderung () Funktion innerhalb der Funktion main () verwendet wird. Der Compiler sagt Ihnen, dass Sie eine Funktion ohne Prototyp verwenden. Wie die Fehlermeldung sagt, sind Sie implizit eine Funktion zu deklarieren. Das ist ein No-No, aber kein Voll auf Fehler.

Die zweite Warnung tritt auf, wenn die Eingabeaufforderung () Funktion im Programm wohnt. Im Quellcode, ist es bei Line 23. Die Warnung besagt, dass prompt () wurde bereits erklärt (in Zeile 11), und dass der zweite Einsatz mit dem ersten Konflikt geraten.

Die letzte Warnung ist ein Hinweis zurück, wo die Funktion aufgerufen wurde, wieder auf Linie 13.

Um es kurz und bündig: Der Compiler hat keine Ahnung, was mit der prompt () Funktion ist oben. Ihr Code kompiliert, aber es ist riskant läuft.

Sie können den Schluss ziehen, dass Prototyping eine absolute Notwendigkeit in Ihrem C-Code ist. Das ist nicht ganz richtig. Sie können durch Neuordnen der Funktionen im Quellcode Prototyping vermeiden. Solange eine Funktion aufgelistet wird, bevor es verwendet wird, brauchen Sie nicht einen Prototyp.

Übung 2: Bearbeiten Sie Ihre Source-Code aus Übung 10-3. Entfernen Sie die Funktion Prototyp, wurde bei Line kommentierte heraus 3. Ausschneiden und Einfügen (move) die prompt () Funktion aus dem Ende des Codequelle an die Spitze Eintrag, über der Funktion main (). Speichern, zu bauen und laufen.

Die Vermeidung der Funktion Prototyp zeigt die Lösung für Übung 2.

VERMEIDEN Funktionsprototyp

# include / * Anzeige Prompt * / void Prompt (void) {printf ( "C: DOS>") -} int main () {int loop-char-Eingang [32] -loop = 0-while (looplt; 5 ) {prompt () - fgets (Eingang, 31, stdin) -loop = Schleife + 1-} return (0) -}

Das Schreiben der Funktion main () zuerst, gefolgt von anderen Funktionen ermöglicht eine bessere Lesbarkeit, auch wenn Sie frei sind eigene Funktionen zu setzen erste Prototypen zu vermeiden. Und wenn Sie das nicht tun, denken Sie daran, dass andere Programmierer es auf diese Weise tun können, seien Sie also nicht überrascht, wenn Sie es sehen.

Compiler-Fehlermeldungen in Code :: Blocks haben Klammern hinter ihnen. Die eingeklammerten Kommentare beziehen sich auf die Schalter, oder traditionellen Befehlszeilenoption, die für eine bestimmte Warnung ermöglicht die Überprüfung. Zum Beispiel lesen die Fehlermeldungen aus Übung 1 in voller Länge:

11 Warnung: implizite Deklaration der Funktion "Prompt" (-Wimplicit-function-Erklärung) 20 Achtung: Konflikt-Typen für "Prompt" (standardmäßig aktiviert)

Menü