schlechte angewohnheit?
-
bessereswissen schrieb:
Nimm statt i++ auch lieber ++i, da dadurch eine sinnlose Kopie vermieden wird.
richtig
-
falsch schrieb:
bessereswissen schrieb:
Nimm statt i++ auch lieber ++i, da dadurch eine sinnlose Kopie vermieden wird.
falsch
Bei einem int als Zähler gibt's natürlich keine unnötige Kopie, bei Iteratoren kann es anders aussehen.
-
Halozination schrieb:
würdet ihr sagen das:
for (int i = 0; i<12345; i++) {..} for (int i = 10; i<54321; i++) {..}
ist schlechter als:
int i; for (i = 0; i<12345; i++) {..} for (i = 10; i<54321; i++) {..}
beim 1. wird i doch einmal mehr allokiert als im 2., sowas kann in bestimmten situationen schon einiges an performance kosten oder? Da würde ich z.b. auf den vorteil ein locales i zu haben verzichten.
Nein.
Lokales i kostet eigentlich nichts. Der COmpiler muß nur zählen, wieviel Speicher die Funktion maximal braucht und kann den ganzen Speicher auf einmal anlegen. Und er kann frei wiederverwenden. Deswegen gibt es ja die Regel, daß lokale Variablen nach Definition ohne Initialisieren keinen bestimmten Wert haben. Damit der Compiler eine ganz lokale Variable auch mal herausziehen darf, ganz wie es ihm beliebt. Und so ein i wird auch gerne gleich zum Register.
Aber andersrum kann er es nicht ganz wie es ihm beliebt, das äußere i wieder lokal zu machen, um das zu schaffen, muß er schon eine ganze Menge mehr analysieren (er schafft es aber inzwischen).
Du tust also sowohl dem Programmierer einen Gefallen, der damit Fehlerchen vermeidet, als auch dem automatischen Optimierer, der besser auswählen kann.
Da ist also kein Zielkonflikt.
Es ist keine schlechte Faustregel, Variablen immer so lokal wie möglich zu machen.Bei größeren Objekten auch hieran denken: http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=Declare#Answ
-
CStoll schrieb:
Im praktischen Einsatz sind mir echte Endlosschleifen eher selten untergekommen - idR hat man eine scheinbare Endlosschleife, deren Abbruchbedingung irgendwo innen drin hinter einem
if(...)break;
versteckt ist.Jupp. Echte Endlosschleifen gibt es selten. Aber while(true), while(1) und for(;;) mit innenliegendem return, trow, break oder goto bleibt unselten.
-
Bei mir compiliert while(true) übrigens noch nicht einmal warnungsfrei: "conditional expression is constant"
Von daher halte ich das auch eher für hässlich.
-
alternative schrieb:
Du darfst und solltest Konstanten auch Namen geben:
const int dingsbums = 13*5; int main() { ...dingsbums... }
#define DINGSBUMS (13*5)
tuts auch.volkard schrieb:
Aber
while(true)
statt
for(;;)
ist nicht hübsch.
Yep, manche Compiler schmeißen bei "while(true)" eine Warnung raus.
-
Mox schrieb:
Bei mir compiliert while(true) übrigens noch nicht einmal warnungsfrei: "conditional expression is constant"
Von daher halte ich das auch eher für hässlich.
Bei mir: "Condition always true".
Ich verwende "while(true)" deshalb schon lange nicht mehr. Ich hasse Compiler-Warnungen.
-
Z schrieb:
alternative schrieb:
Du darfst und solltest Konstanten auch Namen geben:
const int dingsbums = 13*5; int main() { ...dingsbums... }
#define DINGSBUMS (13*5)
tuts auch.Konstanten sind aber schöner als #define
-
Darum gibt es Streit;
Konstante Deklarationen oder
die Präprozessor-direktive #define (Hier bezogen auf z.B.:#define ival 5)
geben, so gesehen, nur einer Zahl einen Namen.
Allerdings hat const einige Vorteile:- C++ überprüft die 'const' - Deklaration sofort, die #define - Direktive aber
erst beim ersten Benutzen des Makros.- 'const' hat einen größeren Anwendungsbereich.
- 'const' wird nach den üblichen C++ -schen Gültigkeitsbereich - Regeln und einer C++ -schen Syntax angewandt und geprüft, die #define - PpD allerdings nicht - Sie ist überall gültig (also in dem Sinne nicht direkt ein Nachteil) und hat
eine eigene Syntax (ob auch jeder versteht, was das dann alles für einen
Unterschied macht, weiß ich nicht).
-
Wenn wir schon über for(;;) und while(true) diskutieren, oder ist es doch for (;;) und while (true) diskutieren, könnten wir dabei noch diskutieren, ob man tabs oder spaces zum Einrücken verwenden soll. Und wenn spaces, dann wie viele? Das ist doch auch eine sinnvolle Diskussion. Zumindest verbringen viele Programmierer viel Zeit damit. Dann muss es doch wichtig sein! Auch wäre es wichtig zu diskutieren, ob ein if immer eine geschweifte Klammer benötigt. Ach es gibt so viele ach so wichtige Sachen zu diskutieren, dass man gar nicht dazu kommt, wirklich produktiv zu sein.
-
Ich mache mal den Anfang:
2 Spaces zum einrücken und if/while/for brauchen nicht immer eine Klammer.
-
cooky451 schrieb:
2 Spaces zum einrücken und if/while/for brauchen nicht immer eine Klammer.
Dito.
-
Genau, wozu überhaupt Leerzeichen
Jeder darf sich austoben, wie er will. Hauptsache, der Compiler kommt damit klar. Write-Only-Source-Code (in Anspielung auf Write-Only-Memory...)
-
abc.w schrieb:
Genau, wozu überhaupt Leerzeichen
Jeder darf sich austoben, wie er will. Hauptsache, der Compiler kommt damit klar. Write-Only-Source-Code (in Anspielung auf Write-Only-Memory...)
Soll ich mir jetzt
for ( ; ; )
angewöhnen?
-
Nicht ganz ernst:
Echte C-Programmierer halten ihren Code so kurz wie möglich.
Nur Softies versuchen das leichter lesbar zu gestalten.Solche Diskussionen sind doch schon so alt wie C oder auch C++.
Schaut euch doch die Bücher der C-Gurus und der C++-Gurus an und vergleicht die untereinander und mit Aussagen der selben Personen ein oder zwei Jahrzehnte später.Ihr könnt natürlich schreiben, der Standard ist das Mass allen Quellcodes. Aber was hilft euch das, wenn der eine oder andere Compiler den z.Z. aktuellen Standard halt nicht so umsetzt, wie es das Komitee beschlossen hat? Aber, wenn es die unterschiedlichen Auslegungen nicht gäbe, würde sich C++ auch nicht weiterentwickeln?
War da nicht mal ein Koryphäe: 1GB Speicher auf einem PC wird nie ausgeschöpft sein? (etwa sinngemäss - vielleicht kennt ja jemand das Original)
MfG f.-th.
-
Das war keine "Koryphäe" sondern Bill Gates, und es ging um 640KB, nicht um 1 GB.
-
hustbaer schrieb:
Das war keine "Koryphäe" sondern Bill Gates, und es ging um 640KB, nicht um 1 GB.
Da hst Du zwar recht, aber
http://www.google.de/search?hl=de&source=hp&biw=1067&bih=773&q=bill+gates+koryphäe&aq=f&aqi=&aql=&oq=
-
hustbaer schrieb:
Das war keine "Koryphäe" sondern Bill Gates, und es ging um 640KB, nicht um 1 GB.
Und im Übrigen ist nachgewiesen, dass er das nie gesagt hat. Ist eine urban legend und wird es bleiben...
-
It0101 schrieb:
Und im Übrigen ist nachgewiesen, dass er das nie gesagt hat. Ist eine urban legend und wird es bleiben...
Echt? Das kann man nachweisen?
-
Es gab mal ne Zeit, da mussten mutmaßliche Hexen vor Gericht ja auch beweisen, dass sie gar keine sind.
@It0101: Falls du das mit dem beweisen von Nichtexistenzen tatsächlich raus hast, hätte ich da ein paar Aufgaben für dich, für deren Lösungen nicht nur ich dankbar wär.