kryptische Funktion :-))
-
Wer errät, was diese Funktion macht? (ohne Kompilieren!)
char* func(char* __aW__) { for(char *_e_,*_s_=__aW__;_s_<_e_;*_s_=*_s_+*_e_-(*_e_=*_s_),_s_++,_e_--); return __aW__; }
Hab gestern ein wenig experimentiert...
-
SliderMax schrieb:
Wer errät, was diese Funktion macht?
Einfach: Sie lässt grüne Nasenkobolde eine Polonaise tanzen.
Da die Funktion undefiniertes Verhalten hat, ist jede Antwort richtig.
-
Meiner Ansicht nach müsste sich die Funktion auf jedem ANSI C++ Compiler problemlos übersetzen lassen...
-
SliderMax schrieb:
Meiner Ansicht nach müsste sich die Funktion auf jedem ANSI C++ Compiler problemlos übersetzen lassen...
Uebersetzen ja, aber das Programm kann abstuerzen...oder auch nicht, daher
sagte Hume ja auch, dass es undefiniertes Verhalten hat. Daher koennten ja auch,
wie Hume sagte, Nasenkobolde rumtanzen (gruene versteht sich)mfg
v R
-
Meine Vermutung, das es nämlich abstürzt konnte ich zumindest für MSVC 6 SP6 mühelos bestätigen.
-
jop, dat geht in die Hose
-
so muss es lauten:
char* func (char* __aW__) { for(char *_s_=__aW__,*_e_=(_s_+strlen(__aW__));_s_<_e_;*_s_=*_s_+*--_e_-(*_e_=*_s_++)); return __aW__; }
Die Funktion dreht halt einen String um.
Ist aber denk ich mal absturzsicher.
-
Hallo,
wenn ich das richtig sehe, dann hat auch diese Version undefiniertes Verhalten (das sich diesmal aber keineswegs in einem Absturz äußern muss). Und zwar wieder in der update-Anweisung der for-Schleife. In der ersten Version hast du einen uninitialisierten Pointer dereferenziert. In der neuen Version hast du ein Problem mit Sequence-Points (siehe Zugriff auf _e_).
-
Davon, dass dem Compiler möglicherweise doppelte Unterstriche in den Variablennamen nicht gefallen, mal abgesehen ...
-
Es kracht zumindest nicht mehr.
Und was die Sequence-Points angeht. Wenn ich's bei Microsoft richtig nachgelesen habe ?!
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_pluslang_c.2b2b_.sequence_points.asp
dann könnte es womöglich sogar legal sein, für MSVC.
-
John Doe schrieb:
Und was die Sequence-Points angeht. Wenn ich's bei Microsoft richtig nachgelesen habe ?!
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_pluslang_c.2b2b_.sequence_points.asp
dann könnte es womöglich sogar legal sein, für MSVC.Nö. Da steht nix, was den vorliegenden Fall legal machen würde.
-
Hast Recht "meine" Logik war wohl genau verkehrt herum.