G
Skippy schrieb:
erstens ist in c++ nirgends festgelegt das man alles erst eine zeile bevor man die variable braucht deklariert daraus folgt deine aussage ist schonmal falsch
Da hast du was falsch verstanden. Ich habe weder eine Behauptung aufgestellt, noch eine Festlegung zitiert. Es war lediglich ein gut gemeinter Rat für sauberes Design. Sicherlich ist dieses nirgendwo definiert, viele gute C++ Programmierer halten sich aber an gewisse Richtlinien.
Skippy schrieb:
zweitens schau dich doch mal im netzt um (ich fasse es mal kurz zusammen)
Da erzählst du uns nichts Neues. Schlechtes Design trifft man leider noch viel zu häufig an.
Skippy schrieb:
wenn es überall im programm gebraucht wird deklariert man das am anfang einer datei oder bei großen projekten mit vielen dateien kann man auch eine große header datei extra fürs deklarieren von variablen struct vectoren usw. anlegen
Wenn man programmweit eine Instanz benötigt, dann wird sowas global realisiert. Das ist richtig. Ob das jetzt eine rohe globale Variable ist, ein Singleton oder was auch immer, ist erstmal egal. Fakt ist, dass ein gutes C++ Programm (auch grosse Projekte) mit sehr wenigen dieser globalen Instanzen auskommt. Die Probleme, die man nämlich sonst verursacht, können weitaus drastischer ausfallen, als ein paar Optimierungsarbeiten.
Skippy schrieb:
wenn etwas nur innerhalb einer funktion gebraucht wird wird es dort am anfang der funktion nicht irgendwo zwischendrin deklariert
Gute Programmierer machen das aber so. Und dabei spielt nicht nur Laufzeit eine Rolle. In-place Deklaration hat noch andere Vorteile, zB lesbarerer Code oder weniger Abhängigkeiten. Wenn eine Variable zB für mehrere Sachen genutzt wird, so kann das schon mal Fehler kaschieren. Die fallen dir irgendwann auf die Füsse, nur nicht während der Testphase. Murphy lässt grüssen.
Skippy schrieb:
dies ist steht so in sämtlichen richtlinien und tutorial zu sauberen programmierstil
Dir ist schon klar, dass wir im C++ Forum sind?
Skippy schrieb:
ausserdem wird es in firmen mit vielen entwicklern auch so verlangt Z.B. Simens
Gutes Design ist leider nicht gesetztlich verankert. Da hast du vollkommen Recht.
Skippy schrieb:
da es nicht zuzumuten ist das ein entwickler eines teams z.b. deklaration eines chars im quelltext erst suchen muss
Gute Programmierer verwenden gute IDE's. Ein Rechtsklick auf die Variable und "go to declaration" ausgewählt, und schon musst du nicht mehr suchen.
Wer nicht auf solche Annehmlichkeiten zurückgreifen kann, wird keinen Unterschied feststellen, ob er nun am Beginn einer Funktion nach der Deklaration suchen muss oder in der Nähe der betreffenden Codestelle.
Skippy schrieb:
ausserdem fördert dein ratschlag fehlerhaften code
Sowas hat man nun von einer demokratischen Regierungsform. Ich will dir deine Meinung auch nicht nehmen, mit meinen Ansichten deckt sich das jedoch nicht.
Skippy schrieb:
z.b.
char1[255]
char2[300]
wenn du char2 in char1 kopieren willst fällt dir wenn beide untereinander sind sofort auf das char2 zu groß ist wenn man es aber wie du machst und zwischen beiden etliche zeilen code liegen fällt das nicht so schnell auf
Du musst noch viel lernen, junger Padawan. Das müssen wir aber alle. Aber um nur mal ein Gegenargument zu deinem recht stark hinkendem Beispiel zu bringen, in C++ verwendet man bequeme Container.
FireFlow schrieb:
Kostet es Zeit Speicher auf den Stack zu legen?
Artchi schrieb:
Hehe, natürlich. Das ist doch ein Push-Befehl auf der CPU, bei einem einfachen Datentyp! Und weg nehmen kostet auch wieder ein Befehl. Das kann sich mächtig summieren.
Hier muss ich noch eine Ergänzung zu Artchi's Beitrag machen. Diese push/pop Geschichten werden nur dann gemacht, wenn für Variablen direkt Register verwendet werden. Sollten nicht ausreichend Register zur Verfügung stehen oder der Speicher nicht in ein oder mehrere Register passen, wird Stack verwendet. Dazu wird am Beginn der Funktion der Stack-Pointer entsprechend angepasst und am Ende der Funktion wieder zurückgesetzt. Das braucht natürlich auch Zeit, aber nur wenige Takte. Praktisch nichts im Vergleich zu dynamischem Allokieren. Es spielt auch keine Rolle, ob du nur 10 int's oder ganze 1000 int's deklarierst.
Skippy schrieb:
speicheranfordern ist unter allen höheren betriebssytemen ein zeitraubendes unterfangen
Je nach Speichermanager ist das durchaus mehr oder weniger korrekt. Das ist aber noch lange kein Grund, nur globale Variablen zu benutzen oder alle am Beginn der Funktion zu deklarieren. Optimierungsarbeiten kommen erst dann zum Zug, wenn dass Programm läuft. Und dann kann man immer noch die std::string Deklaration aus der millionenfach durchlaufenen Schleife rausziehen, so dass nicht immer von neuem Speicher reserviert und freigegeben wird. Programmierer mit gutem Weitblick machen sowas auch schon mal direkt bei der Implementierung.
Matthias_2005 schrieb:
Danke Leute ich habs jetzt woanders gefunden ihr konntet mir nich helfen
Du hattest noch weitere Probleme? Dein ursprünglicher Fehler wurde doch bereits gefunden.