Autor Thema: Kleine Programmierspäße  (Gelesen 17661 mal)

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« am: 12. May 2005, 22:29 »
Wollte mal anfangen eine kleine Sammlung von lustigen Programmierkonstrukten zu erschaffen.
Angefangen mal mit einem Beispiel für C++:
#define private public
Das ist ohne Probleme möglich da der Präprozessor ja nicht weiss was er da macht. So kann man lustigerweise jedweden Schutz in C++ aushebeln^^
Was man mit C nicht für Hübsch Kryptischen Code basteln kann:
(*(void(*)())0)();
Wer kriegt raus was das ist? Es ist ein absolut legaler Ausdruck.
Also falls euch auch lustiges und irgendwie auch erschreckendes über den Weg läuft. Her damit^^
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

B.G.

  • Beiträge: 27
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 12. May 2005, 23:44 »
for(;P("\n").R-;P("|"))for(e=3DC;e-;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);
{

};

Jap, das ist genial -.-°

(Gestohlen aus: 10 Gründe warum Pascal besser ist als C/++

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #2 am: 13. May 2005, 13:21 »
Ist allerdings keine legale Anweisung^^
z.b. das da 3DC Variablen dürfen net mit ner Zahl Anfangen
e- <-was soll das sein?
P("\n").R- <-HÄÄ?
Also wenn dann sollte man sowas auch Compilieren können^^

Auf deiner Seite da steht ausgemachter Blödsinn eines Menschen der keine Ahnung vom Sinn von C hat^^ Es ist ja grad dafür da Portabel zu sein. Es gibt auch andre Sprachen in denen 0x für Hexa verwendet wird. Asm z.b.^^ schliesslich die Mutter aller Sprachen;)
Auch in C weiss man wie gross ein Integer ist :32Bit auf 32Bit Systemen 16 auf 16Bit Systemen was daran so schwer? 5. Wenn man nicht aus allem alles casten könnte wäre ich ziemich dumm dran. und die ersten 3 Dinger da? Was het der Autor da geraucht?
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

GhostCoder

  • Beiträge: 187
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 13. May 2005, 14:38 »
Hi,

und auf nem 8-Bit System ist nen integer 16-Bit groß!
Also, mich nerven die C Variablentypen manchmal schon...

Gruß, GhostCoder
A man, a legend!

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #4 am: 13. May 2005, 14:52 »
Mich nervt C komplett :D Dieses ganze Gefutschell mit den Zeigern und so weiter. Warum kann das net einfach ne Sprache wie BB sein, nur schneller? :D
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 13. May 2005, 16:14 »
Zitat von: Roshl
(*(void(*)())0)();

sollte das gleiche sein wie
call 0x00000000

(void(*)()) macht aus der 0 einen Zeiger auf eine Funktion und (*[...])() ruft diese dann auf, denk ich mal.

Zitat von: Roshl
Auch in C weiss man wie gross ein Integer ist :32Bit auf 32Bit Systemen 16 auf 16Bit Systemen was daran so schwer?


Die Schwierigkeit ist, dass ein Programm, das von 32 Bit Integern ausgeht, auf einem 16 Bit System aufgeschmissen ist, weil es dauernd overflowed. (Bzw. genauer gesagt: bei einem Compiler, der 16 Bit ints hat). Auf einem 64 Bit System ist ein Integer (int) afaik immer noch 32 Bit groß. Also das ist (leider) keine allgemeingültige Regel ...
Dieser Text wird unter jedem Beitrag angezeigt.

elfish_rider

  • Beiträge: 293
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 13. May 2005, 16:27 »
Es sagt ja niemand, C sei 100%ig portabel. Um zB ein Programm von Windows zu einem anderen OS zu portieren, muss man eh alles GUI-Zeugs umschreiben, doch bei genügender Abstraktion kann man den Rest ziemlich lassen...aber bei Verwendung von typedef bzw. #define kann man den vorhin angesprochenen Nachteil leicht umgehen, ausserdem kann man ja auch nur short und long benutzen...

lowlevel

  • Beiträge: 26
    • Profil anzeigen
    • http://www.abi-09.de.tf
Gespeichert
« Antwort #7 am: 13. May 2005, 16:29 »
Ne, du. C++ is schon ok. :D
Ich hasse alle BASIC Varianten.
Basic ist nicht OO. (ok das neue .NET)
Die Sysntax finde ich auch Sch***.
Und überhaupt. :D

Hab mal mit Javascript angefangen, dann PHP und C++.
Bei allen ist die Systax gleich...............
[ich wette gleich schreibt jemand das stimmt nicht]

matthieuriolo

  • Beiträge: 226
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 13. May 2005, 16:39 »
Zitat von: lowlevel
[ich wette gleich schreibt jemand das stimmt nicht]


Wie recht du hast :P

schau dir mal RealBasic an. Eine Programmiersprache à la script-sprache mit allen gui elemente, furchtbar einfach und cross (ohne irgendwelchen code zu ändern!) :D


http://www.realsoftware.com/

Aber sehr buggy...  :cry:

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 13. May 2005, 17:10 »
@elfish_rider Die Windows-GUI gehört auch nicht zum ANSI-Standard, soweit ich weiß...

lowlevel

  • Beiträge: 26
    • Profil anzeigen
    • http://www.abi-09.de.tf
Gespeichert
« Antwort #10 am: 13. May 2005, 17:41 »
Wie gut ich doch Voraussagen kann..........
Ich meinte damit z.B. eine simple if else Abfrage.
C++
if(...)
{
[code]
}
else
{
[other code]
}

BASIC
if ... then
[code]
else
[code]
end if

oder Schleifen
C++
for(a;a<100;a++)
{
dosthstupid();
}

BASIC
for a to 100 (step 1)
dosthstupid();
next

Das meinte ich..... :D

What means "buggy".

matthieuriolo

  • Beiträge: 226
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 13. May 2005, 17:49 »
öhm ... also ich finde das basic einfacher. Da muss man sich nicht immer um die klammern kümmern ;) obwohl a++ sehr viel praktischer is als a=a+1 :/

In rb gibt es einige Bugs ^^ bsp. das spritesurface (is ne 2d grafik darrstellung extra für spiele) hat wunderbar ein collisons event drin, nur... hat man 2 sprites in einem array kann man nicht heraus finde welche 2 es sind ^^ KA wieso... irgend so nen fehler. Oder der text der du in einem string hast tut sich selber utf-8-itisieren ;) kannst dir also vorstellen wie das aussieht (hat ich in meinen 1 jahr erfahrung, vielleicht auch mehr, nur 1 mal. Wurde mir auch nie wieder berichtet das es dass noch mal gegeben hat... war wahrscheinlich einmalig)

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #12 am: 13. May 2005, 19:26 »
@ PorkChicken deine Lösung ist fast richtig, du hast nur einen Stern übersehen^^ call
  • wäre richtig


@all DAS IST KEINE VERDAMMT DISKUSSION DARÜBER WELCHE PROGRAMMIERSPRACHE DIE BESSERE SEI ODER SONSTWAS, ES IST GESCHMACKSSACHE
übrigens wenn man will das int sicher 16 bit ist schreibt man short und fertig
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 13. May 2005, 22:28 »
Zitat von: Roshl
übrigens wenn man will das int sicher 16 bit ist schreibt man short und fertig
Was tut das dann auf nem 8-Bit-System mit nem Buggy Compiler?? Sicher ist nie was...und bei C erst Recht nicht.

Uebrigens ist das 0x123 auch bei ASM nur eine Anpassung an C-Syntax, richtig und Original ist 123h.

OO ist nicht lebensnotwendig und kann nachgebildet werden. Und mit Basic kann man auch Einrueckungen etc verwenden und damit braucht man sich um keine Syntax zu kuemmern - jede Zeile ne Anweisung und fertig ist der Lack.
Ich mag C und Derivate nicht. Und PHP nur muehselig und bedingt.

Svenska

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #14 am: 13. May 2005, 23:15 »
Zitat von: Svenska
Zitat von: Roshl
übrigens wenn man will das int sicher 16 bit ist schreibt man short und fertig
Was tut das dann auf nem 8-Bit-System mit nem Buggy Compiler?? Sicher ist nie was...und bei C erst Recht nicht.


short ist garantiert mindestens 16 bit groß. steht so im standard. wer verbuggte compiler nutzt, ist selbst schuld. :P

sehr schön find ich auch noch sowas:
printf("%s", &0["foobar"]);
Dieser Text wird unter jedem Beitrag angezeigt.

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #15 am: 13. May 2005, 23:37 »
Einiges wichtiges:

1. Basic ist GEIL!
2. C is schrott mit den ganzen Klammern.
3. ASM is sowieso am besten.
4. Wer braucht hässlige Pointer, Objekte, Klassen usw?
5. Compiler mit Schutzmechanismen sind dumm.

Alles, was sonst noch an fragen aufkommt wird hier geklärt:

http://dsdt.info/vermischtes/humor/echteprogrammierer.php

:D
ne ehrlich:
was will man mit diesem ganzen zeug? einfache Bytes und Words und Dwords und Qwords reichen auch, man braucht keine structs oder sonstigen kram...
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

SPTH

  • Beiträge: 79
    • Profil anzeigen
    • http://www.spth.de.vu
Gespeichert
« Antwort #16 am: 14. May 2005, 03:24 »
Zitat von: matthieuriolo
öhm ... also ich finde das basic einfacher. Da muss man sich nicht immer um die klammern kümmern ;) obwohl a++ sehr viel praktischer is als a=a+1 :/


mit mehreren verschachtelten rekursiven funktionen (komplexes programmieren) kennt man sich in QB sicher noch aus :)

außerdem: hat schon jemals jemand das gleiche programm von C(++) und QB erstellen lassen (mal zu beachten: dateigröße) und dann in einem debugger angeschaut...

wenn man nciht den ganzen mist drinnen haben will, dann sollte man eher C verwenden ;)
'Imagine all the people living life in peace!' (Imagine by John Lennon)

http://www.spth.de.vu <- Meine Codes und Artikel
Freier Schreiber für LowLevel

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #17 am: 14. May 2005, 13:04 »
Mir reichts ich mach den Thread zu.
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

 

Einloggen