GCC Position der Funktionen im Programm

Gast #1364084
Hallo

Ich war bisher der Annahme, dass die Position von Funktionen im Programm 
irrelevant sei, da der Compiler ohnehin bei main beginnt und von dort 
aus auf die benötigten Funktionen zugreift. Folgender Code bringt 
allerdings die Fehlermeldung "warning: implicit declaration of function 
'Funktion1'


(void) main (void)
 {
 ...
 Funktion1();
 ...
 }

void Funktion1 (void)
 {
 ...;
 }



dreht man den Spieß um, dann wird der Code ohne Fehlermeldung 
compiliert:


void Funktion1 (void)
 {
 ...;
 }

(void) main (void)
 {
 ...
 Funktion1();
 ...
 }



Ist das normal so?
mfg Merk L
Gast #1364101
Merk L schrieb:

> Ist das normal so?

Ja. Ein schneller Blick auf google mit der Fehlermeldung bringt dir 
sicher auch die Erklaerung dafuer. Oder du guckst in dein C-Buch...
#1364103
Merk L schrieb:

> Ist das normal so?

Ja, denn an der Stelle wo die Funktion aufgerufen wird, muss der 
Compiler bereits den Prototyp der Funktion kennen. Die erste Variante 
sieht korrekt dann so aus:
1
void Funktion1 (void);
2

3
(void) main (void)
4
 {
5
 ...
6
 Funktion1();
7
 ...
8
 }
9

10
void Funktion1 (void)
11
 {
12
 ...;
13
 }
#1364111
Merk L schrieb:
> Hallo
>
> Ich war bisher der Annahme, dass die Position von Funktionen im Programm
> irrelevant sei, da der Compiler ohnehin bei main beginnt und von dort
> aus auf die benötigten Funktionen zugreift.

Und was, wenn die Funktion in einer ganz anderen Datei ist?

De Ausführung des Programms beginnt immer bei main()

Aber wenn der Compiler dein Pogramm übersetzt, geht er den Text von oben 
nach unten durch. Und zwar nur einmal.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.