Self-printing C Programs

utzoo!decvax!harpo!floyd!cmcl2!mcbryan utzoo!decvax!harpo!floyd!cmcl2!mcbryan
Wed Nov 3 21:44:37 AEST 1982


As I understand it C has no I/O.   Thus writing a self-reproducing C
program is meaningless.   Given a particular library of C I/O routines
one could of course do it (e.g. with STDIO ).   However someones else's
IO library might allow shorter self-replications.   For example, the
OMCBIO library has a routine barf() which prints the source file
containing a reference to it.   Thus the program:

#include <omcbio.h>

main()
{
	barf();
}

is self-reproducing.  


NOTE:
The above program actually compiles and runs correctly on my system (4.1 bsd).
It must be run in the directory where it is compiled.

The file  omcbio.h  contains the single line:

#define  barf()   execlp("/bin/cat","cat",__FILE__,0)

This has the nice feature of self-anihalation (overlay) immediatly after the
self-replication.
An obvious extension using fork() provides a tree of self-replicating
programs.



More information about the Comp.lang.c mailing list