int foo() return(-1) ?? Warum geht das
-
int main(int argc, char *argv[]) { return(-1); }
WIeso lässt sich das mit dem visual studio 6.0 kompilieren
-
warum solle sich das nicht kompilieren lassen?
-
Ach du schxxxxx ich hab doch glatt unsigned int und int verdreht
OK Thread kann geschlossen werden
-
Halt doch noch nicht, wieso geht das:
unsigned int main(int argc, char *argv[]) { return(-1); }
-
weil dein Compiler merkwürdiger Weise unsigned int als Rückgabetyp von main akzeptiert.
Wenn du dich aber wunderst, warum
unsigned int i=-1;
geht, dann schau dir mal
http://tutorial.schornboeck.net/overflow.htm
an.
-
Mein Visual Studio compiler akzeptiert alles, bool, char, unsigned int, dürfte er nur int akzeptieren weil dies Standard ist? Ich meine void lässt ja auch jeder compiler durchgehen obwohls falsch ist.
-
Hi,
Ich meine void lässt ja auch jeder compiler durchgehen obwohls falsch ist
Stimmt nicht, das lassen diverse Compiler nicht zu. Und eigentlich darf nur int und somid signed int erlaubt sein.
MfG EIsflamme
-
unsigned int main(int argc, char *argv[]) { return(-1); }
also macht mein compiler hier vermutlich signed draus und springt durch das -1 zur größten Zahl?
-
das hat eben alles mit dem Überlauf bei Zuweisung von negativen Wert von signed nach unsigned zu tun.
in einer Variablen vom Typint
(i.d.R.4 Byte groß; läßt sich übrigens schnell mit der Funktion sizeof rauskriegen) kann man einen Zahlenbereich von -2^31 bis 2^31-1 abbilden.
Allgemein gilt für den Zahlenbereich einer Variablen: von -2^(AnzahlBits-1) bis 2^(AnzahlBits-1)-1
bei unsigned: von 0 bis 2^AnzahlBits-1
wenn man eine Zuweisung der Artunsigned int x = -1;
macht, so steht in x eben die Zahl 4294967295 drin (übertragen wird das Binärmuster!!)
Deshalb macht das dem Compiler nix, denn Du gibst gar nicht -1 zurück sondern 2^32-1
-
ähem das ist ja ganz nett das du das so genau erklärst aber meine Frage war ganz einfach ob er es so macht und nicht wie er es macht
-
Frage am Rande: wozu brauchst Du denn eine
unsigned int main(...)
??
Außerdem wäre doch deine Frage
[quote="15Uhr]WIeso lässt sich das mit dem visual studio 6.0 kompilieren[/quote]
grundsätzlich geklärt, oder
Alles andere (d.h. ob es syntaktisch vom Compiler akzeptiert wird) ist Entwicklungsumgebungsspezifisch ("denke" ich)