upd: brushed names of macroes, added . Ears, by the way, grow . : #include "string.h" #include "stdio.h" #define QUOTE (name) #name #define STR (macro) QUOTE (macro) #define CHECK_FUN_TEXT STR (CHECK_FUN) #define CHECK_FUN int check (const char *s) {char line [1024]; gets (line); if (strcmp (line, "#include \" string.h \"")) {printf ("bad 1 (%s) \n", line); return 1;} gets (line); if (strcmp (line, "#include \" stdio.h \"")) {printf ("bad 2 (%s) \n", line); return 2;} gets (line); if (strcmp (line, "#define QUOTE (name) #name")) {printf ("bad 3 (%s) \n", line); return 3;} gets (line); if (strcmp (line, "#define STR (macro) QUOTE (macro)")) {printf ("bad 4 (%s) \n", line); return 4;} gets (line); if (strcmp (line, "#define CHECK_FUN_TEXT STR (CHECK_FUN)")) {printf ("bad 5 (%s) \n", line) gets (line); if (strstr (line, "#define CHECK_FUN")! =line) {printf ("bad 6 (' %s')\n", line); return 6;} if (strcmp (line+18, s)) {printf ("bad 6x (' %s')\n", line+18); return 6;} gets (line); if (strcmp (line, "CHECK_FUN int main () {return check (CHECK_FUN_TEXT);}")) {printf ("bad 7 (%s) \n", line); return 7;} printf ("good\n"); return 0;} CHECK_FUN int main () {return check (CHECK_FUN_TEXT);} : #include "stdio.h" #define QUOTE (name) #name #define STR (macro) QUOTE (macro) #define QUINE_FUN_TEXT STR (QUINE_FUN) #define QUINE_FUN int quine (const char *s) {printf ("#include \" stdio.h \"\n"); printf ("#define QUOTE (name) #name \n"); printf ("#define STR (macro) QUOTE (macro) \n"); printf ("#define QUINE_FUN_TEXT STR (QUINE_FUN) \n"); printf ("#define QUINE_FUN %s\n", s); printf ("QUINE_FUN int main ( \n "); return 0;} QUINE_FUN int main () {return quine (QUINE_FUN_TEXT);}
Trending Articles
More Pages to Explore .....