Eigenen Quellcode ausgeben
-
Google mal nach Quine
auf Wikipedia steht auch was dazu:
http://de.wikipedia.org/wiki/Quine_%28Computerprogramm%29
-
Oder fals du schreibfaul/denkfaul bist:
Hier hatten wir mal einen kleinen Contest:
http://www.spieleprogrammierer.de/phpBB2/viewtopic.php?t=7712&highlight=quine
Haut auch ein paar Lösungen dazu. Ganz interessant.

-
Ich hab' zwar schonmal vor geraumer Vorzeit etwas über Quines gelesen, aber es noch nie versucht. Wahrscheinlich mach ich's viel zu kompliziert:
#include <cstddef> #include <iostream> char* convert_string( const char * string ) { const char *src = string; std::size_t length = 0; for( ; *src; length = ( *src == 0xa ) || ( *src == 0x22 ) ? length + 2 : length + 1, ++src ); char *new_string = new char[ length + 1 ]; src = string; for( char *dest = new_string; *src; ++src, ++dest ) { if( *src == 0x0a ) { *dest = 0x5c; *( ++dest ) = 'n'; } else if( *src == 0x22 ) { *dest = 0x5c; *( ++dest ) = 0x22; } else { *dest = *src; } } new_string[ length ] = 0; return new_string; } const char my_source_1[ ] = "#include <cstddef>\n#include <iostream>\n\nchar* convert_string( const char * string ) {\n\n const char *src = string;\n std::size_t length = 0;\n\n for( ; *src; length = ( *src == 0xa ) || ( *src == 0x22 ) ? length + 2 : length + 1, ++src );\n\n char *new_string = new char[ length + 1 ];\n src = string;\n\n for( char *dest = new_string; *src; ++src, ++dest ) {\n\n if( *src == 0x0a ) {\n\n *dest = 0x5c;\n *( ++dest ) = 'n';\n\n } else if( *src == 0x22 ) {\n\n *dest = 0x5c;\n *( ++dest ) = 0x22;\n\n } else {\n\n *dest = *src;\n }\n }\n\n new_string[ length ] = 0;\n\n return new_string;\n}\n\nconst char my_source_1[ ] = \""; const char my_source_2[ ] = ";\n\nint main( ) {\n\n std::cout << my_source_1;\n\n char *tmp = convert_string( my_source_1 );\n std::cout << tmp;\n delete[ ] tmp;\n\n std::cout << static_cast< char >( 0x22 ) << \";\" << static_cast< char >( 0x0a ) << \"const char my_source_2[ ] = \" << static_cast< char >( 0x22 );\n\n tmp = convert_string( my_source_2 );\n std::cout << tmp;\n delete[ ] tmp;\n\n std::cout << static_cast< char >( 0x22 ) << my_source_2 << std::endl;\n}"; int main( ) { std::cout << my_source_1; char *tmp = convert_string( my_source_1 ); std::cout << tmp; delete[ ] tmp; std::cout << static_cast< char >( 0x22 ) << ";" << static_cast< char >( 0x0a ) << "const char my_source_2[ ] = " << static_cast< char >( 0x22 ); tmp = convert_string( my_source_2 ); std::cout << tmp; delete[ ] tmp; std::cout << static_cast< char >( 0x22 ) << my_source_2 << std::endl; }greetz, Swordfish
-
Also wenn das funktioniert, dann ist das nicht zu kompliziert.
Sieht noch recht übersichtlich aus, im Gegensatz, zu den anderen, die ich gesehen habe.

-
So nen kleinen Code bekommt ja jeder hin, aber sowas rießiges und formatiertes, dass sich noch selber ausgeben kann...
-
Ist meins jetzt das kleine, das jeder hinbekommt, oder das riesige formatierte, dass sich dazu noch selbst ausgeben kann?

greetz, Swordfish
-
lolz schrieb:
So nen kleinen Code bekommt ja jeder hin, aber sowas rießiges und formatiertes, dass sich noch selber ausgeben kann...
Was willst du uns damit sagen?
-
Swordfish schrieb:
Ist meins jetzt das kleine, das jeder hinbekommt, oder das riesige formatierte, dass sich dazu noch selbst ausgeben kann?

greetz, Swordfish
Klein ist bei mir das:
char*f="char*f=%c%s%c;main() {printf(f,34,f,34,10);}%c";main() {printf(f,34,f,34,10);}drakon schrieb:
lolz schrieb:
So nen kleinen Code bekommt ja jeder hin, aber sowas rießiges und formatiertes, dass sich noch selber ausgeben kann...
Was willst du uns damit sagen?
Eigentlich nichts, ich hatte nur das Bedürfnis laut zu denken

-
lolz_ausgeloggt schrieb:
char*f="char*f=%c%s%c;main() {printf(f,34,f,34,10);}%c";main() {printf(f,34,f,34,10);}#include <stdio.h> char*f="#include <stdio.h>%cchar*f=%c%s%c;main(){printf(f,10,34,f,34,10);}%c";main(){printf(f,10,34,f,34,10);}wennschon

greetz, Swordfish
-
char*f="char*f=%c%s%c;main() {printf(f,34,f,34,10);}%c";main() {printf(f,34,f,34,10);}Das geht aber nicht. Es geht darum den GESAMTEN Quellcode auszugeben, so, dass der compiliert wieder genau das gleiche gibt.
-
Wie oft muss man's eigentlich sagen: _Was_ funktioniert daran nicht (vom fehlenden include abgesehen)?
greetz, Swordfish
-
Ich habe einen Fehler von wegen Escapezeichen bekommen, wenn ich den Code aus der Konsole kopiert habe.
Edit:
Ok, war nur new-line, dass kann man noch gelten lassen..
-
Welcher Compiler/OS?
greetz, Swordfish