Quellcodeformatierung: Klammern
-
Was ist besser?
class A { public: void bla() { } };
oder
class A { public: void bla() { } };
Was nutzt ihr und was sind die Vor- und Nachteile?
-
früher hab ich die 2. Methode benutzt, doch nun benutz ich idr. die 1. Methode, weil man sich so
leichter das Problem vom Hals hält:
void foo(); //<--- ; ! { }
-
kingruedi schrieb:
früher hab ich die 2. Methode benutzt, doch nun benutz ich idr. die 1. Methode, weil man sich so
leichter das Problem vom Hals hält:
void foo(); //<--- ; ! { }
ich verwende die 2. methode weil sie uebersichtlicher ist:
du kannst von
} leichter zu einem { finden als zu etwas anderem.das ; problem finde ich irgendwie komisch. mir ist das noch nie passiert, dass ich ein ; zuviel gesetzt habe. und selbst wenn: der compiler meldet einem den fehler ja...
-
Ich finde ersteres schöner weils den Code kürzer macht, aber bei Funktionen hat sich das of als unpraktisch erwiesen. Darum nehm ich beides.
-
Ich nutze 2. weil es einfach übersichtlicher ist finde ich, hat aber den Nachteil mehr Platz zu verbrauchen, so das ich bei ganz kurzen Sachen dann immer 3. nutze.
class A { public: void bla() { blabla..;} };
-
2, aber mit der gleichen Einschränkung wie Bigwill.
-
Shade Of Mine schrieb:
das ; problem finde ich irgendwie komisch. mir ist das noch nie passiert, dass ich ein ; zuviel gesetzt habe. und selbst wenn: der compiler meldet einem den fehler ja...
Naja, vielleicht meldet er den Fehler bei einer Funktionsdefinition, aber was ist mit:
void foo(int i) { if(i < 10); // Kein Compiler-Fehler! { //.... } }
Ich bevorzuge Variante 1, aber vermutlich nur aus Gewohnheit. Im Büro verwenden wir 2, wobei allerdings die Klammern, außer im äußersten Block, mit eingerückt werden.
Stefan.
-
wobei allerdings die Klammern, außer im äußersten Block, mit eingerückt werden.
Das ist imo die furchtbarste Form der Formatierung. An 1 kann ich mich immer recht schnell gewöhnen, aber dieses
void func() { cout << bla; }
macht mich völlig fertig
Ich nutz' zwei und bleib dabei.
-
2., mittlerweile ausnahmslos. Wenn ich wirklich mal zu viele Einzeiler (getter) habe, kann ich die ja einklappen
-
DStefan schrieb:
if(i < 10); // Kein Compiler-Fehler!
Ich wundere mich immer über solche Vorteile, weil ich bestimmt schon viele Fehler gemacht habe, aber sowas ist mir noch nie passiert.
-
zu
if(i <10);
sagt mein suesser VC7
warning C4390: ';' : empty controlled statement found; is this the intent?
also das ist doch eine schoene warnung, oder?
und das auf Warnstufe 3 (4 ist die hoechste) und unter Warnstufe 3 sollte man sowieso nicht kompilieren...
-
Shade Of Mine schrieb:
zu
if(i <10);
sagt mein suesser VC7
warning C4390: ';' : empty controlled statement found; is this the intent?
also das ist doch eine schoene warnung, oder?
und das auf Warnstufe 3 (4 ist die hoechste) und unter Warnstufe 3 sollte man sowieso nicht kompilieren...Auf 4 bekommt man aber sogar zT Warnungen aus der hauseigenen STL
Ich verwende ausschließlich #2. Einfach weil es besser strukturiert ist und man leichter einen Block finden kann {und} statt irgendeine Anweisung und}.
MfG SideWinder
-
ich benutz für funktionen
void foo() { //.... }
und für sachen wie if while for usw. (also sachen innerhalb einer funktion)
if (bla) { }
is mir persönlich am liebsten
-
Marc++us schrieb:
2, aber mit der gleichen Einschränkung wie Bigwill.
/me too.
-
nman schrieb:
Marc++us schrieb:
2, aber mit der gleichen Einschränkung wie Bigwill.
/me too.
ebenso
-
/me ohne einschränkung. ich mach halt die schnittstellen nicht so groß, dann geht das auch.
-
Regeln und Konventionen sind dazu da, eingehalten zu werden. Gerade wenn mehrere Softwareentwickler an einem Source arbeiten, kommt es darauf an, diese Regeln so einfach wie möglich zu halten, damit auch jeder sich die Regeln merken kann. Deshalb sollte man sich für Klammern gleich welcher Art - also egal ob runde, geschweifte oder eckige - auf eine simple Regel einigen:
Korrespondierende Klammern - also die zusammengehörende öffnende und schließende Klammer - stehen immer und überall entweder nebeneinander in derselben Zeile oder untereinander in derselben Spalte. Mehr braucht's eigentlich nicht. Ausser der Annahme, daß Compound-Klammern zum äußeren Block gehören, also selbst nicht eingerückt werden. Nur der Code darin wird eingerückt. Und zwar immer gleichmäßig um 2 Blanks, keine Tabs, egal ob davor ein if, while, for oder sonstwas steht. Macht sich spätestens dann positiv bemerkbar, wenn man mit einem Texteditor arbeitet, der spaltenweise Blöcke bearbeiten kann. Das bißchen Mehraufwand an Zeilenanzahl und Dateigröße sollte heutzutage kein Problem mehr darstellen, schließlich muß man nicht mehr mit 64x16 Zeichen Bildschirm und 160kB Disketten auskommen ...
-
Die simpelste Regel ist vielleicht dann die beste, wenn man mit Kindergartenkindern arbeitet.
-
vorallem ist das sicher nicht die einfachste Regel
-
Ich versteh auch überhaupt nicht, wie sich an so einem nichtigen Thema die Gemüter entzünden können. Man sollte alles lesen können, so oder so, und zur Not kann man das ganze durch indent jagen. Fragen zum Programmierstil fangen bei mir erst bei solchen Sachen wie Foo bar(); vs. void bar(Foo&) an, also nichts, was man durch eine mechanische Transformation auf lexikalischer Ebene ändern könnte.
-
ich meinte das nicht darauf bezogen, dass meine Variante besser ist. Sondern das es deutlich leichter zu merkende Regeln gäb. Wie zB.
Klammern sind immer in einer Zeile. Kann sich jeder leicht merken. Ist aber natürlich nicht übersichtlich