X. H. wrote:
> Hi!
>
> Man kann ja Stukturen mit
>
> nur inizialisieren bei der Deklaration, und nicht später:
>
Richtig
>
1 | str={3,5,"lalala"}; //Error! - Nur bei Deklaration erlaubt!
|
Auch richtig. Das ist keine Initialisierung sondern eine
Zuweisung.
>
> In C++ kann ich nun aber folgendes machen:
>
1 | > #include <iostream>
|
2 | > char ajdlksfjkspause;
|
3 | > #define Pause() ajdlksfjkspause=getc(stdin);
|
4 | > using namespace std;
|
5 | >
|
6 | > int main(int argc, char *argv[])
|
7 | > {
|
8 | > typedef struct {int a;int b;}VAR;
|
9 | > int thea=2;
|
10 | >
|
11 | > for(int theb=0;theb<100;theb++)
|
12 | > {
|
13 | > VAR var={thea,theb}; // <--- is dies ungezogen?
|
14 | > cout<<"---> a: "<<var.a<<" b: "<<var.b<<endl;
|
15 | > }
|
16 | > Pause();
|
17 | > }
|
18 | >
|
>
> Und es funktioniert. Beim ersten Durchlauf der Schleife wird das var
> deklariert und mit {thea,theb} inizialisiert.
Bei jedem Durchlauf wird eine Variable var erzeugt und
initialisiert. Sobald das } erreicht wird, ist die
Lebenszeit für var abgelaufen und es wird zerstört.
Wird der Schleifenkörper erneut betreten, so wird wieder
eine naue Variable var erzeugt.
> Beim Nächsten Durchlauf auch wieder, obwohl es die Variable ja schon
> gibt.
>
> Comiler: "Egal, steht der Typ VAR vor, darf also immer wieder neu
> inizialisiert werden...?"
Das ist, na ja, etwas fremdartig formuliert.
Du solltest dir nochmal die sog. 'Scope-Regeln' für Variablen
zu Gemüte führen.
Kurz gesagt: Bei der Deklaration einer Variablen wird sie
erzeugt (und auch möglicheriweise initialisiert). Die Variable
stirbt, wenn der Block in dem sie deklariert wurde, zu Ende ist
(wenn also das Block abschliessende } erreicht wird).
>
> Gehört sowas zu unsauberem Programmierstil?
Nein. wieso sollte es?
Wenn du in jedem Schleifendurchlauf eine neue Variable haben
willst, dann ist das so.
> Es geht so schön schnell, wenn man mal z.B. ein Rechteck definieren
> will:
>
> bsp.:
>
1 | > int a=50;
|
2 | > int b=100;
|
3 | > SDL_Rect rect={50,50,a,b};
|
4 | >
|
Spricht nichts dagegen.
Ganz im Gegenteil. Man versucht Variablen erst dann zu
deklarieren (und damit auch zu initialisieren) wenn sie
tatsächlich gebraucht werden.