Una riflessione filosofica in realtà, ho provato ad intendere la seguente questione, di cui poi vediamo l'esito:
può un codice sorgente scrivere esattamente sé stesso?
Questo significherebbe (tralasciando eventauli errori di tipo segmentation fault, accesso non consentito a determinate zone di memoria), scrivere ad esempio in C, un programma (main.c) che crea un puntatore a file, il quale scrive un nuovo file main.c che contiene esattamente (lo sottolineo!) sé stesso. Vediamo un esempio di programma, che poi commentiamo:
#include <stdio.h>
#include <stdlib.h>
int main(){
FILE *f1=fopen("main.c", "w");
fprintf( ... );
fclose(f1);
return 0;
}
All'interno della funzione fprintf( ... )
dovremmo, ipoteticamente, inserire tutto il codice precedente. Vediamo dunque che si tratta di una situazione impossibile, andrebbe a generare una ricorsione infinita! Ovvero una funzione fprintf()
che contiene il codice compresa un'altra funzione fprintf()
che contiene... e così via! Tralasciando poi la questione del carattere di escape ( \ ) per poter gestire la presenza dei doppi apici.
In conclusione, un codice sorgente non potrà mai essere in grado di scrivere totalmente sé stesso. Questo non solo con la scrittura su file (funzione fprintf()
ma anche una semplice stampa a video tramite printf()
, è analogo! Avremmo comunque una funzione printf()
che deve stampare tutto il codice del programma, compresa la funzione printf()
che stampa... e così via).