Kurios, kurios und zur Info
-
Hallo zusammen, jetzt war ich einen Tag auf Fehlersuche und habe folgendes entdeckt, was ich dem Forum mitteilen will bw. vielleicht weiß ja einer eine Erklärung oder mein Visual Studio 6 Compiler oder was auch immer hat eine Macke.
Folgendes kurze Codefragment verursacht bei mir jedenfallse keinen Compiler oder Linker Fehler.//Nur ein Beispiel int Irgendeine Funktion { int x=0,Ret=0; Ret=EineAndereFunktion(); if(Ret==FALSE) return FALSE, x=5; return TRUE; }
Man bemerke das erste return
das Komma wird nicht als Syntaxfehler registriert.
Das Programm läßt sich bis zu dieser Stelle ausführen und hängt sich dann auf.Schreibt man das return FALSE in Klammern, meckert der Compiler
Na so was aber auch, vielleicht bin ich aber nur blöd, aber ich habe Zeugen in unserer Abteilung, alles erfahrene Entwickler.
Einer meinte er hatte so ein Problem auch bei Borland innerhalb von Funktionsparametern verwendete er einhier also umgekehrt),....
gruss gerhardt
-
Was soll den bitte das sein???
//Nur ein Beispiel int Irgendeine Funktion // Rückgabewert int! { int x=0,Ret=0; Ret=EineAndereFunktion(); if(Ret==FALSE) return FALSE, //Rückgabe erst bool, dann int und bei der Rückgabe auch noch verändert??? x=5; return TRUE; // Wieder Rückgabe bool statt int? }
Wenn erfahrenen Programmierern dazu nicht einfällt, würde mich interessieren wo Du arbeitest.
P.S. Arbeitest Du zufällig bei Mircosoft???
-
[cpp]
int Irgendeine Funktion**()** // Hier fehlen auch 2 Klammern!
[/cpp]
-
Soll ich jetzt eure postings nach ebenso solchen Dingen durchsehen?
Mein Gott?
Natürlich gebe ich dem BOOL auch seine Chance, aber darum gings doch hier nicht oder? :pJungs das war nur ein schnelles Beispiel für das return, das war nicht mein verwendeter Code.
Meine Frage lautet, warum erkennt der compiler das "Komma" nicht.
Sieht er das als eine Art Argumentenliste?Wie gesagt setze ich Klammern, dann wird gemeckert.
Sachen gibts
-
Folgendes kurze Codefragment verursacht bei mir jedenfallse keinen Compiler oder Linker Fehler.
//Nur ein Beispiel int Irgendeine Funktion { int x=0,Ret=0; Ret=EineAndereFunktion(); if(Ret==FALSE) return FALSE, x=5; return TRUE; }
Die Aussage dürfte aber doch wohl gelogen sein, oder?
Schreib doch nicht eine Funktion die etliche Fehler hat um zu fragen warum ein bestimmter Fehler auftritt. Wie soll man denn dabei helfen.Ich hab ja schließlich keine Glaskugel, die mir alles erzählt.
Aber wenn du als Rückgabewert "int" hast und mit Return "int" und "bool" zurückgeben willst, wundert es mich nicht, das das Programm nicht das macht, was es soll.
Soll sich der Komiler selber aussuchen welchen Rückgabewert er nimmt?
-
FALSE != false
-
Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum MFC mit dem Visual C++ in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
ich gaube dem lieben Gerhardx2 ging es um diese Kuriosität:
int testfunction(); int main(){ cout<<testfunction();//es wird 2 ausgegeben!! return 0; } int testfunction(){ int x=1,y=2; return x,y; }
mit return x,y; gibt man nämlich y zurück! seltsam, seltsam....
post scriptum: ich weiß, daß wir hier bei AnsiC sind und ich C++-features verwende, aber darum geht es gerade ja nicht;ergo: bitte nicht schimpfen
Trikor schrieb:
P.S. Arbeitest Du zufällig bei Mircosoft???
-
Meine Frage:
warum wird das Komma ignoriert?
Und um es zu verdeutlichen ein funktionierendes Beispiel, mit Kommavoid CTestDlg::OnButtonFalse() { // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen MeineFunktion(); } void CTestDlg::MeineFunktion() { int x=10; int y=0; CString sShow; int ReturnCode=0; ReturnCode=AddFunktion(x,y); sShow.Format("Rückgabe: %d",ReturnCode); AfxMessageBox(sShow); } int CTestDlg::AddFunktion(int a, int b) { int z=0; int Ret=12345; if(b==0) return Ret,//hier das Komma z=a/b; return z; }
Mit Komma bekomme ich einen Programmabsturz, weil man eben nicht durch 0 teilen darf
Also kein Bool kein false/FALSEAber Unix-Tom, vielleicht liegt ja an dem VC++ Compiler oder ist das so gedacht?
-
freshman
genau das war es.
mein Beitrag hat sich wohl überschnitten.
Und da das Komma ein Tippfehler war habe ich nur so lange gebraucht bis ich den Fehler gefunden habe
-
warum das so ist und ob das Standard ist weiß ich aber auch nicht, ist mir auch nur aufgefallen; benutze nämlich auch M$ Visual Studio 6.0
-
Der gcc, g++ liefert in diesem Fall auch keinen Fehler.
-
super ihr habt den kommaoperator entdeckt...*beglückwünsch*
http://userpage.fu-berlin.de/~ram/pub/pub_kfd8tk88g/c_operatoren_und_sequenzpunkte_de
da findet ihr auch ne erklärung
-
@TheTester
Danke und da siehste mal wozu wir u.a. so ein Forum brauchen.
Mir war schon klar, dass das in die Richtung geht, aber an den Operator habe ich nicht mehr gedacht.
Was man halt selten bis gar nicht benutzt, fällt aus dem Augengenwinkel.
Dann scließen wir mal diesen Thread und ich bedanke mich bei allen Beteiligten, denn damit ist meine Frage, wenn wir sie als solche gelten lassen wollen, beantwortet.
Das Komma habe ich also solches ja nicht wahrgenommen, denn das konnte ja nicht gehen. In for-schleifen habe ich diesen Operator ja auch in Verwendung.
Ja Ja
also nochmals Danke und schönen Gruß