001
21.01.2004, 16:36 Uhr
virtual
Sexiest Bit alive (Operator)
|
| Zitat: |
~macintosh postete wenn ich eine variable in einer funktion definiere, ist sie dann in der ganzen funktion gültig?
|
Allgemein gesprochen ist eine Variable ab dann nutzbar, wenn man sie deklaraiert hat bis zum ende des umgebenden Gültigkeitbereich. Wenn es keine gloable Variable ist, dann Endet die Gültigkeit mit der entsprechenden geschweiften Klammer zu. Folgender Quelltext:
| C++: |
int global;
// Stelle 1:
void function() { // Stelle 2:
int local1;
// Stelle 3;
if/do/oder was auch immer { // Stelle 4 int local2; // Stelle 5 } // Stelle 6 } // Stelle 7
|
An Stelle 1 : Nur Variable "global" ist gültig/sichtbar An Stelle 2 : Nur Variable "global" ist gültig/sichtbar An Stelle 3 : Variablen "global" und " local1" sind gültig/sichtbar An Stelle 4 : Variablen "global" und " local1" sind gültig/sichtbar An Stelle 5 : Variablen "global", "local1" und " local2" sind gültig/sichtbar An Stelle 6 : Variablen "global" und " local1" sind gültig/sichtbar An Stelle 7 : Nur Variable "global" ist gültig/sichtbar
In der Regel wird Dich der Compiler daraufhinweisen, wenn du da was falsch machst, weil er die Variable selbst nicht findet. In einer for/while Schleife kann man auch eine Variable definieren, die verhält sich dann wie local2. Der VC6 hat da einen Bug, der die Gültigkeit von local2 bis stelle6 hinausverlängert.
| Bearbeitung: |
Gmeint ist folgendes:
| C++: |
. .. for(int i = 0; i<10; ++i) { } ... // i ist noch immer gültig!
|
Dieses Verhalten wird von MS als Feature verkauft, allerdings hebelt es die Standardconformität komplett aus-
|
| Zitat: |
~macintosh postete was ist wenn ich die variable in der funktion in einem loop definiere. wird sie dann bei jedem durchlauf neu angelegt, so dass ich irgendwann einen speicherüberlauf habe?
|
Nein, weil die alte Variable ja gelöscht wird. Es sei denn, du belegst den Variableninhalt mit einem von new/malloc/calloc/realloc zurückgegebenen Wert. Dann mußt du ihn freigeben.
| Zitat: |
~macintosh postete wieso kann ich void funktionen manchmal nicht aufrufen, sondern nur wenn ich static davor schreibe? was genau bewirkt static.
|
WEil Du vielleicht keine normale Funktion benutzen willst, sondern eine Methode (also eine Funktion, die Mitgleid eine Klassendefinition ist). Ka. Meghr Code. -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) Dieser Post wurde am 21.01.2004 um 16:46 Uhr von virtual editiert. |