Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Allgemeines (OffTopic) » Techie-kunst

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ] [ 4 ]
010
04.08.2003, 23:52 Uhr
Pablo
Supertux
(Operator)



Zitat:
FloSoft postete
seltsam, der vc will mir das nicht kompilieren

Ich habe extra windows gestartet um auszuprobieren, ob VC++ diesen Code kompilieren kann.
Das war das Ergebnis:

Code:
--------------------Configuration: a - Win32 Debug--------------------
Compiling...
a.c
c: \dokumente und einstellungen\administrator\desktop\a.c(8) : warning C4013: 'putchar' undefined; assuming extern returning int
Linking...

a.exe - 0 error(s), 1 warning(s)



Unter windows funktioniert auch, und der lange Text wird hier auch ausgegeben. Mir ist immer noch ein Rätsel, wie der Typ sowas geschafft hat. Wieso funktioniert diesen Code Ich kappiere gar nix! Wieso funktioniert das? Was bedeutet den main(t,_,a) und das ganze Zeug. Ich hab die letzte Zeile geändert und das Ergebis war eine Katastrophe. Ich möchte gerne wissen, wie man auf so was kommt.

Debuggen dauert auch sehr lange und verstehe auch kein Wort.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 04.08.2003 um 23:57 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
05.08.2003, 08:30 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


vielleicht liegts daran das ich das programm per konsole versucht hab zu kompilieren
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
05.08.2003, 10:39 Uhr
virtual
Sexiest Bit alive
(Operator)


@pablo
Das Programm nutzt einen in der FAQ beschriebenen Umstand aus, daß man unter UNIX auch drei Parameter an main Übergeben kann. Hier wird das eben mit den Parametern t, _ (schöner variablen Name, gell?) und a gemacht.
Das hier

C++:
main(t,_,a)char*a;{...


Entspricht einer vor-standard Deklaration, die gleichbedeutend ist mit

C++:
int main(int t, int _, char*a) {...


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
05.08.2003, 13:39 Uhr
kronos
Quotenfisch
(Operator)


hi!
wahrscheinlich schon bekannt, nicht so spektakulär aber mir genauso unbegreiflich ist das hier :
C++:
int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell\
o, world!\n"
,'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);}


--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
05.08.2003, 14:29 Uhr
virtual
Sexiest Bit alive
(Operator)


@kronos.
Ich find, das geht noch. Mal Step by step:
Original:

C++:
int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell\
o, world!\n"
,'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);}


Mit Umformatieren erhält man:

C++:
/* Nur umformatiert und i lokal gemacht */
main()
{
    int i;
    for(i=0;
        i["]<i;++i){--i;}"];
        read('-'-'-', i+++"hello, world!\n", '/'/'/'));
}
read(j,i,p){write(j/p+p,i---j,i/i);}


Einige krypischte Ausdrücke kann man vereinfachen:

C++:
/* siehe Kommentare */
main()
{
        int i;
        for(i=0;
                /* i["..."] => "..."[i]!=0 => i<strlen("...") =>  i<14 */
        i<14;
                /* '-'-'-' => '-' - '-' == 0 und
           '/'/'/' => '/' / '/' == 1 */

        read(0, i+++"hello, world!\n", 1));
}
read(j,i,p){write(j/p+p,i---j,i/i);}


Und dann:

C++:
main()
{
        int i;
        /* Leichte umformatierung,
       i+++"..." == &"..."[i], also i-tes zeichen aus text. Den
       Text mache ich mal zur constanten variablen. */

    const char* text = "hello, world!\n";

        for(i=0; i<14;)
        {
        read(0, &text[i++], 1);
        }
}
read(j,i,p){write(j/p+p,i---j,i/i);}


Dann nehmen wir uns mal die letzte Zeile (eine Funktion) und tun sie nach oben. Weitere Vereinfachungen inklusive

C++:
int read(int j, const char* i, int p)
{
        /* p ist immer 1 => j/p+p = j+1.
       j ist immer 0 => j+1 == 1
           i/i == 1
       i---j => i-- -j => i-- => i
        */

        write(1, i, 1);
}

main()
{
        int i;
    const char* text = "hello, world!\n";

        for(i=0; i<14;)
        {
        read(0, &text[i++], 1);
        }
}


Da die Funktion jetzt ein wirklich einfacher einzeiler ist, kann man sie ganz ersetzen:

C++:
/* Read ersetzt */
main()
{
        int i;
    const char* text = "hello, world!\n";

        for(i=0; i<14;)
        {
        write(1, &text[i++], 1);
        }
}


Und wen das write noch stört:

C++:
main()
{
        int i;
    const char* text = "hello, world!\n";

        for(i=0; i<strlen(text);)
        {
                /* write(1, &text[i++], 1) ist printf("%c", text[i]);
                   ist putchar(text[i]) */

                putchar(text[i]);
        }
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 05.08.2003 um 14:31 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
05.08.2003, 15:01 Uhr
kronos
Quotenfisch
(Operator)


wow, net schlecht!
mit "kryptischen zeichen" wie du sie nennst kann ich leider überhaupt nichts anfangen...
aber was ist eigentlich mit dem backslash in "hello"? sowas setzt man glaub' ich bei 'nem zeilenumbruch ein, aber im original war da keiner.
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
05.08.2003, 19:10 Uhr
~christian
Gast


Hallo,

ich kann den Code mit dem vc auch nicht kompilieren, mit dem gcc schon. Das sind meine Fehlermeldungen:


C++:
E: \C++ Tests\virttest\main.cpp(2) : error C2065: 't' : nichtdeklarierter Bezeichner
E: \C++ Tests\virttest\main.cpp(2) : error C2065: '_' : nichtdeklarierter Bezeichner
E: \C++ Tests\virttest\main.cpp(2) : error C2065: 'a' : nichtdeklarierter Bezeichner
E: \C++ Tests\virttest\main.cpp(2) : error C2448: '<unbekannt>' : Funktionsstil-Initialisierung scheint eine Funktionsdefinition zu sein
E: \C++ Tests\virttest\main.cpp(2) : fatal error C1004: Unerwartetes Dateiende gefunden



Was muss ich denn einstellen, dass das funktioniert?

Grüße

-- edit by Pablo: smiles entfernt --

Dieser Post wurde am 05.08.2003 um 21:10 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
05.08.2003, 21:02 Uhr
virtual
Sexiest Bit alive
(Operator)


Keine Ahnung. Benutze nicht den VC so häufig. Ich würde mal nach Optionen suchen, die die Übersetzung von Code von vor C89 Standard erlauben.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
05.08.2003, 21:07 Uhr
Pablo
Supertux
(Operator)


Was ich gemacht habe war folgendes. Ich hab Notepad geöffnet und mit Strg+C den Code vom Opera Fenster kopiert und in Notepad eingefügt. Danach hab ich die Datei als irgendwas.c gespeichert und mit Doppelklick sie geöffnet. Ich hab die Datei gar nicht geändert und dem VC++ gesagt, er soll die Datei Kompilieren und das war's! Natürlich wird ein neues Projekt erstellt, aber VC++ soll gar nicht die Datei irgendwas.c ändern.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
06.08.2003, 10:50 Uhr
0xdeadbeef
Gott
(Operator)


VC kompiliert Dateien mit der Endung .c als C-Sourcen, und welche mit der Endung cpp als C++-Sourcen. C++ erwartet, dass man den Typ der Parameter explizit angibt, C ist da nachlässiger und nimmt implizit int an.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ] [ 4 ]     [ Allgemeines (OffTopic) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: