Definitionen und Deklarationen
-
In C war es immer üblich am Anfang eines Scopes alle innerhalb des Scopes verwendeten Daten zu Beginn zu deklarieren (hatte - glaube ich - etwas mit dem Stack zu tun?). Die Definitionen habe ich dann immer fein säuberlich von den Deklarationen getrennt.
Seit ich einige Zeit in C++ entwickle, definiere ich Daten immer dort, wo ich sie benötige. Eine explizite Deklaration entfällt somit oft. Das hat so etwas "Undurchdachtes" an sich, ist aber bei längeren Algorithmen schon besser lesbar, da Zusammengehörendes auch zusammen steht.
Der grösste Vorteil für mich scheint, dass der Compiler mich auf nicht benötigte Daten aufmerksam macht (im Beispiel a), wenn ich diese sofort definiere ohne diese zu deklarieren. Dass b nicht benötigt wird, kann der Compiler nicht erkennen.
Beispiel:
void foo() { int a = 17; int b; // Code, hier werden a und b nicht benötigt b = 23; // Code, hier werden a und b nicht benötigt }
Ich glaube das Prinzip noch nicht ganz verstanden zu haben. Folgendes funktioniert in C++ aber nicht in C:
for (int i = 0; i < n; i++); for (int i = 0; i < k; i++);
Meine Fragen:
1. Gehört es auch in C++ zu "guten" Stil, Definitionen von Deklarationen zu trennen?
2. Wie in obigem Beispiel mit den beiden Schleifen, wäre es besser den Laufindex i im C-Stil immer vor den Schleifen zu definieren anstatt in jeder Schleife neu?
Sorry, für die naiven Fragen
Gruss
T.
-
Evtl verwechselst Du was bei Definition, Deklaration und Initialisierung.
Ja, es ist guter Stil, alle Variablen so spät wie möglich zu erzeugen. Und wenn die Wahl ist, auch gerne früh killen. Das hat auch nichts mit Undurchdachtheit zu tun und ist übersichtlicher und der liebe Compiler kann manchmal besser optimieren und Fehler vermeidet es auch. Einfach nur gut.
-
Tomahawk schrieb:
1. Gehört es auch in C++ zu "guten" Stil, Definitionen von Deklarationen zu trennen?
Auf diese Frage in der Art: Ja.
Allerdings ist deine Frage falsch, denn du meinst Definition und Initialisierung. Dies probiert man in C++, wenn möglich nicht zu trennen.Tomahawk schrieb:
2. Wie in obigem Beispiel mit den beiden Schleifen, wäre es besser den Laufindex i im C-Stil immer vor den Schleifen zu definieren anstatt in jeder Schleife neu?
Kommt auf die Anwendung an, normalerweise definiert man die Variable aber in der Schleife. Man sollte Variablen immer nur so lokal wie möglich benutzen.
Im übrigen:
Nur zu C89 Zeiten musste man alle Variablen zuoberst definieren. In C99 ist das nicht mehr nötig und wird auch nicht mehr so gehandhabt.Grüssli
-
Danke für die Erklärungen!
Gruss
T.