www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zu extern und Funktionsprototypen


Autor: newbieNoob (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin zusammen,...
ich bin gerade dabei eine Software eines Anderen zu erweitern,...
Mal abgesehen davon dass diese ein heilloses durcheinander darstellt, 
glaube ich dass da noch mehr mist abläuft???

Ok,...
Es gibt das .c und das.h file....
Beispiel:

So kenne ich es:

h.- file:
extern void globalFunc1(void);
extern void globalFunc2(void);

.c- File
//Prototypen
void globalFunc1(void);
void globalFunc2(void);

void localFunc1(void);

//Funktionsbereich
globalFunc1(void)
{
  //tu was
}

globalFunc2(void)
{
  //tu was
}

localFunc1(void)
{
  //tu was
}

Mein Vorgänger lässt jetzt im Prototypbereich alle im .h- File extern 
deklarierten Funktionen weg.
Hier also


.c- File
//Prototypen
// void globalFunc1(void); //nicht da
// void globalFunc2(void); //nicht da

void localFunc1(void);

//Funktionsbereich
globalFunc1(void)
{
  //tu was
}

globalFunc2(void)
{
  //tu was
}

localFunc1(void)
{
  //tu was
}

Hab ich da was falsches gelernt??

Außerdem hab ich mal irgendwo gelesen dass der Compiler nur durch 
Prototypen die Funktionen richtig erkennt.
Ich weiß jetzt aber nicht mehr wo ichs gelesen hab und in welchem 
Zusammenhang??


Gruß
noob

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei Funktionsprototypen ist das extern flüssiger als Wasser (OK, 
schaden tut es nicht...). extern wird nur bei Variablen benötigt, weil 
der Compiler da nicht von der Syntax her unterscheiden kann, ob es sich 
um eine Definition (also Anlegen einer Variablen inklusive Reservierung 
von Speicher) handelt oder um eine Deklaration ("Bekanntmachung", die 
dem Compiler lediglich sagt, dass irgendwo anders eine Variable des 
Namens und des Typs definiert ist). Ein Funktionsprototyp ist auch ohne 
extern als solcher erkennbar, nämlich durch die Tatsache, dass auf die 
schließende Klammer nach der Parameter-Liste ein Semikolon folgt.

Jede Variable und Funktion, die in einem Programm verwendet wird, muss 
genau einmal definiert werden. Deklarieren kann man sie beliebig oft. 
Deshalb gehören in eine .h-Datei auch prinzipiell nur Deklarationen 
(also Variablen mit extern und Funktionsprototypen) und keine 
Definitionen hinein, damit es bei mehrfach-includes nicht zu 
Kollisionen kommt. Wenn eine Funktion in einer C-Datei definiert wird, 
und sie in anderen C-Dateien zur Verfügung stehen soll, dann wird eine 
.h-Datei angelegt, die die dazugehörigen Prototypen enthält. Die 
.h-Datei wird in alle .c-Dateien, in denen die betreffenden Funktionen 
verwendet werden sollen, mit #include eingebunden. Die .c-Datei wird dem 
Compiler als Quelldatei angegeben und dann von diesem separat 
compiliert.

Autor: newbieNoob (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi danke für die schnelle Antwort,

demnach hat mein Vorgänger und ich recht??
Den Prototyp kann man hinzufügen oder nicht?

Ich füg dann die Prototypen ein, find ich (persönlich) sauberer.

Gruß
noob

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
newbieNoob wrote:
> demnach hat mein Vorgänger und ich recht??
> Den Prototyp kann man hinzufügen oder nicht?
Du kannst in Deine C-Datei so viele Prototypen ein und derselben 
Funktion schreiben, wie Du willst, das tut außer viel überflüssigem Text 
nichts zur Sache...

> Ich füg dann die Prototypen ein, find ich (persönlich) sauberer.
Wenn die Prototypen schon in der Header-Datei stehen (und die 
Header-Datei auch ordnungsgemäß eingebunden ist), ist es überflüssig, 
aber verboten ist es nicht.

Autor: newbieNoob (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen, vielen Dank!!,...

Gruß

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.