mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik GCC Position der Funktionen im Programm


Autor: Merk L (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
void Funktion1 (void);

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

void Funktion1 (void)
 {
 ...;
 }

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.