Forum: Mikrocontroller und Digitale Elektronik Frage zu extern und Funktionsprototypen


von newbieNoob (Gast)


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:
1
extern void globalFunc1(void);
2
extern void globalFunc2(void);

.c- File
1
//Prototypen
2
void globalFunc1(void);
3
void globalFunc2(void);
4
5
void localFunc1(void);
6
7
//Funktionsbereich
8
globalFunc1(void)
9
{
10
  //tu was
11
}
12
13
globalFunc2(void)
14
{
15
  //tu was
16
}
17
18
localFunc1(void)
19
{
20
  //tu was
21
}

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


.c- File
1
//Prototypen
2
// void globalFunc1(void); //nicht da
3
// void globalFunc2(void); //nicht da
4
5
void localFunc1(void);
6
7
//Funktionsbereich
8
globalFunc1(void)
9
{
10
  //tu was
11
}
12
13
globalFunc2(void)
14
{
15
  //tu was
16
}
17
18
localFunc1(void)
19
{
20
  //tu was
21
}

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

von Johannes M. (johnny-m)


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.

von newbieNoob (Gast)


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

von Johannes M. (johnny-m)


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.

von newbieNoob (Gast)


Lesenswert?

Vielen, vielen Dank!!,...

Gruß

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.