Quellcoderätsel
-
NES-Spieler schrieb:
Ach Mist, das wurde viel zu schnell gelöst.

du hast uns masslos unterschätzt

edit: und wo bleibt die siegerehrung? immerhin hab' ich mit 3 sekunden vorsprung gewonnen

-
NES-Spieler schrieb:
An HumeSikkins: Das versteh ich nicht. Wieso ist das gültiger C-Code?
Weil du nicht gesagt hast, welche C-Version du meinst. In ANSI C-89 darf man eine Funktion aufrufen ohne sie zuvor deklarieren zu müssen. In C++ (und C99) ist das hingegen nicht erlaubt.
Das ist übrigens auch genau der Grund, warum man in C *niemals* den Rückgabewert von malloc casten sollte: wenn man in C89 eine Funktion nicht deklariert, wird implizit int als Rückgabewert angenommen. Vergisst man nun stdlib.h zu inklduieren und verwendet trotzdem malloc, dann schießt man sich mit dem Cast schön in den Fuß. Hat man eine korrekte Funktionsdeklaration, bleibt der Cast überflüssig, da C bekanntlich eine implizite Konvertierung von void* in alle anderen Zeigertypen erlaubt (darauf spielt ja auch nets Beitrag an).
-
und wo bleibt die siegerehrung?
<singing>Tätätätätätäää! Tätätätätätätätäää!</singing> You are the winner!
Reicht das?
In ANSI C-89 darf man eine Funktion aufrufen ohne sie zuvor deklarieren zu müssen.
Ach so, das wußte ich nicht.
-
NES-Spieler schrieb:
und wo bleibt die siegerehrung?
<singing>Tätätätätätäää! Tätätätätätätätäää!</singing> You are the winner!
Reicht das?
danke, danke, ich fühle mich sehr geschmeichelt

aber jetzt auf zur zweiten runde (mit etwas höherem schwierigkeitsgrad):
gleiche aufgabe wie die von NES-spieler - aber - diesmal soll es unter C *und* unter C++ fehlerfrei compilieren und linken, aber das verhalten der executables soll unterschiedlich sein...auf die plätze - fertig - los! *peng*
-
#include <stdio.h> int main() { #ifdef __cplusplus puts("C++"); #else puts("C"); #endif }okay, wenig kreativ. Lass uns alle Sachen mit Prüfung auf __cplusplus verbieten

-
Du mußt das Semikolon dahinter schreiben.
So stehen zwei Stück dort. 
-
@rüdi: dein beitrag gilt nicht, du hast gegen ein paar regeln verstossen (siehe NES_Spielers beitrag)
z.b. nur *eine* anweisung, keine #includes etc...
-
int main() { int a= #ifdef __cplusplus 1 #else 0 #endif ; }
-
@rüdi: leider wieder nix

NES-Spieler schrieb:
Es darf außer der einen Sache in Zeile 3 nichts weiter hinzugefügt, geändert oder gelöscht werden.
-
Falls sizeof(char) != sizeof(int):
int main () { int i = sizeof('a') == sizeof(char) ? *(int*)0 : 1; return 0; }
-
@HumeSikkins:
sehr schön.
nah an der musterlösung.
etwas kompliziert gedacht, aber das 'unterschiedliche verhalten' gut umgesetzt.
erste richtige einsendung
-
ok, hier scheint sich nix mehr zu tun...
...and the winner is...
* * * * HumäääääääääääääSikkinnnnnns!!!!! * * * *
zwar kampflos, aber immerhin
btw, meine 'muster'lösung sieht so aus:
int main () { return sizeof('a'); return 0; }
-
warum liefert das unter C was anderes als unter C++?
-
Habe auch noch was schönes:
int main() { int a[2] = { [1] = 1 }; return 0; }
-
das kompiliert aber weder in C noch in C++
-
Dann ist dein Compiler zu dumm. Das ist jedenfalls gültiges C99.
-
achso, du bist wieder bei der ersten frage... ging ja grade um C++-code der in C was anderes macht.
-
Yep, das bezog sich auf den ersten Beitrag des OP.
-
Edit: Aha - es geht inzwischen um eine andere Frage als ursprünglich ...
schade, die ursprüngliche fand ich eigentlich interessanter.Gruß,
Simon2.
-
Simon2 schrieb:
rüdiger schrieb:
int main() { int a= #ifdef __cplusplus 1 #else 0 #endif ; }Was soll denn in C++ daran "ungültiger Code" sein ?
Lies den Thread.

Es gibt noch eine Aufgabe.