In "Reflections on trusting trust" --- http://cm.bell-labs.com/who/ken/trust.html --- Ken Thompson urges the reader to try write a quine. If you haven't done so yet, please try before reading on.
Here are two quines I made (without cheating), loosely based on the same idea, that I wrote in C. The first one is macro-based, utilizing the ability for macros to quote parameters:
#define Q(x) #x;x
char *q=Q(main(){printf("#define Q(x) #x;x\nchar *q=Q(");printf(q);printf(")\n");})
Compiling and running it produces an exact copy of itself:
~/devel/quine csl$ gcc --no-warnings shortq.c -o shortq && ./shortq