• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Kleines Rätsel

Man schreibe ein C-Programm das seinen eigenen Quelltext ausgibt:
Regeln:
Erlaubt sind Includes von "stdlib", "stdio" und "math".
Das Programm muss kontextfrei laufen (Sprich: Egal wo es liegt, wie das Kompilat und die Quelltext-datei benannt sind , muss es laufen. Das Programm muss auch dann laufen, wenn der Quelltext nicht mehr vorhanden ist.).
Die Ausgabe in einer Datei umgeleitet, muss mit der ursprünglichen Quelltext-datei übereinstimmen
Compiler darf keine Warnings ausgeben.
Kommentare sind erlaubt.
Rekursion ist ebenfalls erlaubt.
Nur eine Quellcodedatei.

Sonst viel Spass beim rätseln.
 
Hallo,

Interessant... aber nicht neu :D

Code:
#include <stdio.h>
char *s = "char *s = %c%s%c; main() { printf( s, 34, s, 34 ); }"; main() { printf( s, 34, s, 34 ); }
Oder etwas übersichtlicher:

Code:
#include <stdio.h>

char *s = "char *s = %c%s%c; main() { printf( s, 34, s, 34 ); }";
main() {
printf( s, 34, s, 34 );
}

Gruss,
Roland
 
Quine

Ein Quine ist ein Computerprogramm, das eine Kopie seiner selbst (üblicherweise seines Quelltextes) als Ausgabe schreibt. Es handelt sich somit um eine Form der Selbstbezüglichkeit.
de.wikipedia.org/wiki/Quine_(Computerprogramm)

Roland
 
Dennoch liedert deine Lösung (bzw die von Wikipedia) nicht einen vollständigen kompilierbaren code.

Hier meine Lösung:
Code:
1 |#include<stdio.h>
2 |char*m="\"";char*n="\n";char*b="\\";int q(char*x,char*y,char*z){printf("#include<stdio.h>%schar*m=%s%s%s%s;char*n=%s%sn%s;char*b=%s%s%s%s;%s%s%s%s%sint main(){q(%s%s%s,%s%s%s,%s%s%s);}%s",n,m,b,m,m,m,b,m,m,b,b,m,x,m,y,m,z,m,x,m,m,y,m,m,z,m,n);}int main(){q("int q(char*x,char*y,char*z){printf(","#include<stdio.h>%schar*m=%s%s%s%s;char*n=%s%sn%s;char*b=%s%s%s%s;%s%s%s%s%sint main(){q(%s%s%s,%s%s%s,%s%s%s);}%s",",n,m,b,m,m,m,b,m,m,b,b,m,x,m,y,m,z,m,x,m,m,y,m,m,z,m,n);}");}
3 |

Zeile 2 zu einer Zeile zusammenfassen.
 
Oben