gängige Anfänger-Fehler?
-
Ein klassischer Anfängerfehler ist auch breaks nach cases zu vergessen obwohl man sie eigentlich benötigen würde. (Der Compiler sagt dazu leider klarerweise nichts...
)
Oder bei STL-Funktionen die Präfixe entgegennehmen diese als myPrefix() statt als myPrefix zu übergeben...
-
if (x = y)
statt
if (x == y)
-
Ringincludes sind auch fies.
a.h in b.h includen und b.h in a.h includen. Passiert zwar nicht nur Anfängern, aber die wissen am wenigsten, was ihnen da passiert sein könnte.
-
for(int i=0; i<10; ++i);
Arrayindex mit 1 beginnen statt mit 0 (hinten Speicherüberschreitung)
-
Also Variablen innerhalb eines Case-Zweiges geht doch
Für das if (x = 9)-Problem würd ich einfach als Tipp schreiben,dass man sich
angewöhnen soll if (9 == x) zu schreiben
-
Hi,
virtuell Realisticer schrieb:
Hi,
was mir schon ein paar mal passiert ist:
if(....); wird_ja_nie_aufgrund_der_bedingung_ausgefuehrt();
Weiss jetzt allerdings nicht, ob der Compiler ne Meldung wirft.
gute Compiler tun das:
warning C4390: ';': Leere kontrollierte Anweisung aufgetreten; ist dies beabsichtigt?
Manchmal macht man das ja aber auch absichtlich, v.a. bei while()-Schleifen.
ChrisM
-
Hi,
mir fällt da gerade etwas ein, was zwar keinen fehler generiert, aber Anfängern mal passieren kann:
for(int i = 1;i < 10; i++); { //... }
-
c++eus schrieb:
Hi,
mir fällt da gerade etwas ein, was zwar keinen fehler generiert, aber Anfängern mal passieren kann:
for(int i;i < 10; i++); { //... }
Aber hallo, i ist nicht initialisiert.
-
Daniel E. schrieb:
c++eus schrieb:
Hi,
mir fällt da gerade etwas ein, was zwar keinen fehler generiert, aber Anfängern mal passieren kann:
for(int i;i < 10; i++); { //... }
Aber hallo, i ist nicht initialisiert.
Doch mit 0
-
Daniel E. schrieb:
c++eus schrieb:
Hi,
mir fällt da gerade etwas ein, was zwar keinen fehler generiert, aber Anfängern mal passieren kann:
for(int i;i < 10; i++); { //... }
Aber hallo, i ist nicht initialisiert.
Habs schon verbessert. Wobei: das kann man ja eigentlich auch aufführen. Gibt zwar ebenfals keinen Fehler, kommt aber zu unvorhersehbaren Fehlern.
-
SirLant schrieb:
Doch mit 0
Nur wenn die Schleife global wäre. Dann wiederum erzeugt sie einen Syntaxfehler.
c++eus: Genau das meinte ich. Viele Compiler warnen allerdings irgendwie.
-
SirLant schrieb:
Daniel E. schrieb:
c++eus schrieb:
Hi,
mir fällt da gerade etwas ein, was zwar keinen fehler generiert, aber Anfängern mal passieren kann:
for(int i;i < 10; i++); { //... }
Aber hallo, i ist nicht initialisiert.
Doch mit 0
Mit 0? Wird es nicht mit dem schon im Speicher befindlichen Wert belegt?
Bei mir kommt folgendes raus:1073823776
-
Daniel E. schrieb:
c++eus: Genau das meinte ich.
War aber eigentlich nicht als Fehler gedacht...
-
Also nur bei globalen Variablen?
Mein VC++ warnte nicht als ich folgendes testete in main:
for (int i; i < 10; i++);
-
SirLant schrieb:
Mein VC++ warnte nicht als ich folgendes testete in main:
for (int i; i < 10; i++);Stell mal die Warnungsstufe hoch, dann muß er schon warnen.
-
SirLant schrieb:
Also nur bei globalen Variablen?
Mein VC++ warnte nicht als ich folgendes testete in main:
for (int i; i < 10; i++);Lass dir doch mal i ausgeben. Dann erhälst du Zahlen wie 10543.
musicman schrieb:
Stell mal die Warnungsstufe hoch, dann muß er schon warnen.
Aber dabei handelt es sich doch um gültiges Standard-C++, oder? Da dürfte er doch keine Warnung ausgeben.
-
C++Eus schrieb:
Aber dabei handelt es sich doch um gültiges Standard-C++, oder? Da dürfte er doch keine Warnung ausgeben.
int i =1; //... if(i = 5)
Das ist auch Standard-C++, trotzdem ist der Compiler so nett und weist darauf hin, dass es vielleicht nicht so gewollt ist!
[edit]hab die Quote-Tags korrigiert[/edit]
-
Bleibt c++eus noch zu sagen, dass ich schon vor ihm auf den Semikolon-hinter-for-Schleife-Fehler gekommen bin.
-
1. warnen darf ein Compiler so viel er will
2. und der Zugriff auf nicht initialisierten Variablen ist `undefined behaviour` also nicht Standardkonform
-
c++eus schrieb:
Aber dabei handelt es sich doch um gültiges Standard-C++, oder? Da dürfte er doch keine Warnung ausgeben.
Warnen darf er doch soviel und so wenig wie er will. zB ist
if(i=0)
in den meisten Fällen nicht gewollt. Deshalb fragt mich mein Compiler immer ganz nett: 'Ausdruck ergibt immer 'false'. Hast du wirklich = gemeint und nicht ==?'Solche Warnungen sind nicht nur völlig OK, sondern verdammt nützlich.
zB auch:
while(1);
{
}da fragt er mich dann 'Ist dieses leere Statement beabsichtigt?'
Einen Fehler darf er mir aber nicht anzeigen - aber warnen soviel er will.