Frage von uehcsxam, 17

Muss eine Funktion (in der Programmiersprache C) vor Benutzung deklariert werden?

Steht oben. Danke für die Antwort im vorraus!

Antwort
von TeeTier, 13

Die anderen Antworten sind zwar sehr gut, und auf die solltest du auch unbedingt hören, aber leider sind sie alle falsch! :)

Eine Funktion muss VOR dem Gebrauch WEDER deklariert, NOCH definiert werden!

In so einem Falle wird als Rückgabewert "int" und eine leere Argumentenliste angenommen (was bedeutet, dass man beliebige Argumente übergeben kann).

Du kannst also Folgendes machen:

int main(void) {
return foo(23);
}

int foo() {
return 42;
}

Der Aufruf von foo(23) und die spätere Deklaration / Definition ist absolut korrekt.

(Der Übersichtlichkeit halber macht das Programm nichts anderes, als 42 zurück zu liefern, völlig ohne weitere Ausgaben.)

ABER: Gewöhne dir so einene Mist auf keinen Fall an! Das ist nicht nur schlechter Stil, das ist sogar "perverser" Stil. :)

Die meisten Compiler werden dir sowieso eine Warnung raushauen, wenn du versuchst, den obigen Schnipsel zu kompilieren ... nichtsdestotrotz ist es völlig legitimes gültiges C, und jeder Compiler sollte dir daraus ein lauffähiges Programm erzeugen - und zwar trotz Warnungen.

In Legacy-Code findet man manchmal solche "Perlen". Wer so etwas aber heutzutage noch zu programmieren wagt, gehört erschossen! :)

Fazit: Wenn man es genau nimmt, lautet die Antwort auf deine Frage eindeutig "Nein", so steht es zumindest im C-Standard. Allerdings kennen vermutlich selbst viele Lehrer diese korrekte Antwort auf die Frage nicht, und falls euch dein Lehrer bisher nicht auf diesen Umstand hingewiesen hat, wird er vermutlich fälschlicherweise ein "Ja" als Antwort erwarten.

Du musst dich also entscheiden, ob du dem Lehrer das sagst, was er hören will, oder ob du dich für die formal richtige Lösung entscheidest, und dich auf eine Diskussion einlässt.

Aber noch eine Warnung zum Schluss: Gewöhne dir bitte IMMER ordentliche Prototypen an, und zwar auch dann, wenn du die Funktionen komplett vor dem Gebrauch definierst.

Eine ordentliche Aufteilung in Header und Quelltextdatei solltest du dir von Anfang an angewöhnen. Das erspart dir später viele Scherereien. Außerdem solltest du deine Compiler-Warnstufe hoch einstellen, damit du garantiert immer auf fehlende Deklarationen hingewiesen wirst, was z. B. oft passiert, wenn du vergisst eine Bibliothek mit zu linken ... aber das ist schon wieder ein anderes Thema.

Viel Spaß dabei, deinen Lehrer zu überzeugen! :)

Kommentar von ByteJunkey ,

Mir ist auch bewusst, dass Prototypen eigentlich der größte Misst sind, wenn es um guten Codestil geht, aber wenn man nur Konsolenprogramme schreibt, dann kann man solche verwenden.
Sobald man aber an einem größeren Projekt (vllt auch 2D oder 3D), dann sind Prototypen nur hinterlich. Ich rate eigentlich immer von Prototypen ab, da es ja Klassen o.ä. gibt, aber hier war die Frage eindeutich zu Prototypen ;)

Antwort
von Roderic, 12

Um eine (eigene) Funktion auch verwenden zu können, muss sie überhaupt erst mal definiert werden.

Da man das üblicherweise vor der main() macht, ist sie mit der Definition auch automatisch deklariert.

Antwort
von ByteJunkey, 17

Ja, außer du definierst die Funktionen vor der main(). Wenn du die Methoden NACH der main() definierst, dann musst du sogenannte Prototypen erstellen.

Ein Prototyp ist das:
void foo();

Eine definition VOR der main() sieht so aus:

void foo()
{
     // code
}

Eine definition NACH der main() sieht dann so aus:

void foo(); // Prototyp

int main()

{

    foo();

    // code...

}

void foo()

{

    // code...

}

Man verwendet also Prptotypen, um dem Compiler "zu sagen", dass es diese Funktion bereits existiert.

Hast du alles verstanden? ;)

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten