Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » globale Variable

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 <
000
17.05.2004, 08:42 Uhr
Unwissende
...die wirklich Unwissende 8-)


Hallo,

ich weiß, globale Variablen sollte man eher nicht verwenden, aber das ist bei mir im Moment die einfachst Lösung...
In meinen Büchern hab ich nicht wirklich viel gefunden darüber...
Also, wo genau deklariere ich sie?
Mit

C++:
extern int dataWords;


gebe ich einen Verweis darauf, das wo anders die Variable dekl. wurde, oder?
D.h. ich verwende den "extern"-Hinweis überall dort, wo die Var verwendet wird, oder?
Aber wo genau (in irendeiner *.cpp-Datei, im Header...?!?!) muss ich sie denn jetzt deklarieren, wenn sie für das gesamte Projekt gültig sein muss?!?
Danke!
--
__________________________________
Unwissenheit ist vorläufig- Dummheit für immer
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.05.2004, 08:46 Uhr
(un)wissender
Niveauwart


extern sagt nur aus, dass du sie anders wo deklariert hast.
Eine globale Variable deklarierst du ohne extern, einfach wie alle anderen, halt nur nicht in einer Funktion oder Klasse.

C++:
//Überall sichtbare globale Varibale
int global_int;

//nur in dieser Datei sichtbare Variable
namespace {
int global_int;
}





C++:
Frage nicht genau gelesen, sorry:
Du deklarierst sie genau einmal (in irgendeiner Datei), und verwendest für alle anderen Dateien extern.


--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 17.05.2004 um 08:47 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.05.2004, 08:52 Uhr
Unwissende
...die wirklich Unwissende 8-)


Danke, aber was ist mit den Headern?
Ich muss ja die Header der DAtei, wo die Var dekl. wurde, in alle anderen Dateien, wo die Var benutzt wird (eben mit "extern") einbinden, oder?
--
__________________________________
Unwissenheit ist vorläufig- Dummheit für immer
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.05.2004, 09:15 Uhr
Pablo
Supertux
(Operator)


Also, du kannst mit extern darauf hinweisen, dass die Variable global ist und dass sie irgendwo deklariert ist. Das ist Information für den Compiler. Der Linker kümmert sich drum, die Variable zu benutzen. Bsp: Du hast 3 .cpp Dateien, die auf diese Variable zugreifen, also müsstest du folgendes tun:


C++:
*/ allgem.h */
#ifndef ALLGEM_H
#define ALLGEH_H
... /* dein Stuff */
extern int globalVar;
...
#endif



Damit a.cpp, b.cpp und c.cpp sie benutzen können

C++:
/* a.cpp */
#include "allgem.h"
int globalVar; /* a.cpp deklariert die Variable */
...


b.cpp und c.cpp müssen die Deklaration nicht mehr machen, der Linker kümmert sich darum.

C++:
/* b.cpp */
#include "allgem.h" /* damit a.cpp auch auf globalVar zugreifen kann */
...




C++:
/* a.cpp */
#include "allgem.h" /* damit c.cpp auch auf globalVar zugreifen kann */
...


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.05.2004, 09:48 Uhr
Unwissende
...die wirklich Unwissende 8-)


Super, vielen Dank!
Dann gibt es doch noch Hoffnung für mein Programmierprojekt


--
__________________________________
Unwissenheit ist vorläufig- Dummheit für immer
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.05.2004, 10:45 Uhr
virtual
Sexiest Bit alive
(Operator)


Nur eine kleine Feinheit bzgl. Post 003:

Unter einer Deklaration versteht man, daß ein Name (Variable/Funktion/Klasse) eingeführt wird, so daß alle wissen, daß es diesen Namen gibt und welchen Typ er hat.
Unter einer Definition versteht man die Bereitstellung des Speichers und dessen inhalt (bei einer Variablen also der Speicherbereich der Variablen + ggf initialisierungwert; bei einer Funktion die Adresse der Funktion + der Definition).

Eine Definition ist stets auch eine Deklaration:

C++:
int a; // Definition + Deklaration gleichzeitig
void f() { std::cout<<"f"<<std::endl; } // Definition + Deklaration gleichzeitig



Das umgekehrte gilt jedoch nicht:

C++:
extern int a; // Nur Deklaration
void f(); // Nur Deklaration



NB:
Meines Wissens ist bei Variablen die Storage class "extern" die einzige, die es ermöglicht, Deklaration und Definition einer Variablen zu trennen.

Faustregel 1: in einen Header kommen nur deklarationen, in die Implemtierungsdateien die Definitionen.
Faustregel 1a: Davon ausgenommen sind Inline funktionen und (in C++) Templates, welche in den Headern stehen müssen.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
17.05.2004, 14:48 Uhr
(un)wissender
Niveauwart


Ich glaube, im Header müssen auch Membervariablen definiert werden, ich habe mal versucht, sie dort nur zu deklarieren, hat nicht gefunzt.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
17.05.2004, 15:02 Uhr
virtual
Sexiest Bit alive
(Operator)


Eine membervariable ist ja nur eine Deklaration, besonders deutlich wird dies anhand von static members: Die deklariert man im Header, definiert sie aber im CPP file. Und für instance member variablen wird ja auch kein Speicher belegt.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
17.05.2004, 15:15 Uhr
(un)wissender
Niveauwart


Jupp, wie recht du hast.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: