Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » eigenen Header einbinden, "extern" oder nicht

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
24.08.2006, 19:26 Uhr
2cHH



Hi,



ich beschäftige mich noch nicht so lange mit C. Auch wenn die meisten Tutorials heutzutage von C++ zu handeln scheinen, habe ich imho mittlerweile recht gute Literatur gefunden, z.B. als PDF "Softwareentwicklung in C" oder "Informatik und C", aber auch "Einführung in die Wintendo-Programmierung mit C".


Eine Sache (OK, es sind bestimmt noch ein paar mehr ) ist mir nicht klar geworden:


Wenn eine Datei "function.c" als Modul fungiert, also funktionen anbietet, muss eine andere Datei, nennen wir sie mal "main.c", den Header von "function" einbinden, damit der Linker die Verweise auf Funktionen und eventuelle globale Variablen (pfui) zuordnen kann. "function.c" hat also eine Headerdatei "function.h", in der diese Sachen deklariert werden. Damit diese Deklarationen für die Datei "main.c" durch das "#include "function.h" nicht zur Definition werden, wird die Speicherklasse "extern" Verwendet.


Wenn jetzt aber "function.c" seine eigenen Header einbindet, ist in dem Fall doch extern falsch, oder nicht? Darf eine Datei dann nicht mehr ihren eigenen Header einbinden? In dem Beispiel auf Seite 82 von "Softwareentwicklung in C" wird das aber so gemacht. Ich habe mir mal die Header bei MinGw gcc angesehen, "extern" taucht da imho eher selten auf. Kann auch sein, dass ich das ganze irgendwie noch nicht durchschaut habe.


Ist eine Datei, die einen eigenen Header hat, ein Modul?

Was ich eigentlich wissen möchte ist, wie funktioniert der Datenaustausch und Funktionsaufruf zwischen Dateien untereinander über Header genau.



MfG aus HH
--
greetz,
2cHH
_____________
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.08.2006, 19:34 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Darum sind Funktionsprototypen imho automatisch "extern".
Die Angabe von extern bei Funktionen ist also (normalerweise) nicht nötig.

Variablen musst du jedoch explizit mit extern kennzeichnen und
müssen dann in einer cpp natürlich auch definiert worden sein.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.08.2006, 19:45 Uhr
2cHH



.
Ja aber wenn ich dann meinen eigenen Header einbinde (reine Textersetzung, soweit ich verstanden habe), müsste doch in meinr eigenen Datei die Variable auch als Extern deklariert sein.

Das wäre doch aber eigentlich falsch, denn sie ist ja gar nicht extern, sondern soll in dieser Datei (function.c) definiert werden.

Beispiel:

Datei: main.c

C++:
#include <stdio.h>
#include "function.h"   <--------------hier steht "extern int n;", das ist ok

int main(int argc, char** argc)
    {
    n = 5;
    calc(10);
    return n;
    }



Datei: function.h

C++:
extern int n;

void calc(int);



----------------------------------------
Datei: function.c

C++:
#include "function.h"   <--------------hier steht aber auch "extern int n;"

void calc(int nValue)
    {
    n = n* nValue;
    }



Mein Problem ist, die Variable n ist doch überall als extern deklariert, nirgendwo als "normaler int".


Muss n nochmal ohne "extern" definiert werden?
Oder ist es verkehrt, den eigenen Header einzubinden?


Bearbeitung:

bitte cpp-tags selbst benutzen!!!!


--
greetz,
2cHH
_____________

Dieser Post wurde am 25.08.2006 um 12:54 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
24.08.2006, 22:56 Uhr
2cHH



.
Ist es denn üblich, dass man in eine Datei ihren eigenen Header einbindet?
--
greetz,
2cHH
_____________

Dieser Post wurde am 24.08.2006 um 22:56 Uhr von 2cHH editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
24.08.2006, 23:02 Uhr
~Blubber2063
Gast


Ja das macht man eigentlich immer, du deklarierst die Variable in der .c oder .cpp Datei und machst nen extern verweis in die .h
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
24.08.2006, 23:06 Uhr
2cHH




Zitat von ~Blubber2063:
Ja das macht man eigentlich immer, du deklarierst die Variable in der .c oder .cpp Datei und machst nen extern verweis in die .h



Aber wird sie dann nicht zweimal deklariert?


c-datei:

include header <-----------hier steht doch eigentlich "extern int n;" für den compiler

int n;

int main() ......

-------------------------

header-datei:

extern int n;




oder ist das "extern int n" die deklaration und das in dem fall folgende "int n" dann die definition für den compiler?


also so:


extern int n; <---------deklaration

int n; <-----------definition

int main().........


ist das richig? naja, wenn es so funktioniert ist auch gut.....
--
greetz,
2cHH
_____________

Dieser Post wurde am 24.08.2006 um 23:12 Uhr von 2cHH editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
24.08.2006, 23:11 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Nein, das extern bedeutet dann nur, das sie eben auch extern deklariert wird, in der Headerdatei wird genau genomen noch gar nichts deklariert.
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
24.08.2006, 23:13 Uhr
2cHH



Aber so macht man das, oder nicht?
--
greetz,
2cHH
_____________
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
24.08.2006, 23:20 Uhr
~Blubber2063
Gast


extern heisst es gibt eine variable, bzw funktion mit dem namen in einem anderen Modul,
d.h. du hast die Variable global in Modul X deklariert, damit du sie in Modul y benutzen kannst brauchst du dort extern, das kannst du aber auch gleich in den Header schreiben, da jedes Modul das die Variable aus X nutzen will eh den Header von X included.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
24.08.2006, 23:41 Uhr
2cHH




Zitat von ~Blubber2063:
.....da jedes Modul das die Variable aus X nutzen will eh den Header von X included.



Ja, und das Module includet doch seine eigenen Header auch, nicht?


Dann hat man doch die Situation, die ich oben mit den beidenm Dateien skizziert habe. Genau DA ist mein Verständnisproblem.
--
greetz,
2cHH
_____________
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: