Frage zu extern und Funktionsprototypen

Gast #939922
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
#939928
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.
Gast #939937
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
#939945
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.