diff --git a/C/3_Sully/Sully.c b/C/3_Sully/Sully.c index 241bbe7..5f681a9 100644 --- a/C/3_Sully/Sully.c +++ b/C/3_Sully/Sully.c @@ -2,9 +2,9 @@ #include /* for free and system */ #include /* for __FILE__ */ #include -#define xstr(s) #s -#define str(s) xstr(s) -#define FT(s) int main() { char *before = "#define _GNU_SOURCE /* for asprintf */\n#include /* for free and system */\n#include /* for __FILE__ */\n#include \n#define xstr(s) #s\n#define str(s) xstr(s)\n#define FT(s) "; char *quine = s; char *after = "\nint i = %i;\nchar *file_name = %s%s;\nFT(str(FT(s)))\n"; if (i == 0) return 0; if ((strchr(file_name, '_')) != ((void*)0)) i--;char *kid_name; char *kid_name_c; char *after_expanded; char *cmd; asprintf(&kid_name, "Sully_%i", i); asprintf(&kid_name_c, "%s.c", kid_name); FILE *file = fopen(kid_name_c, "w"); asprintf(&after_expanded, after, i, "__FI", "LE__"); fprintf(file, "%s%s%s", before, quine, after_expanded); fclose(file); asprintf(&cmd, "clang %1$s -o %2$s ; ./%2$s", kid_name_c, kid_name); system(cmd); free(cmd); free(kid_name_c); free(kid_name); free(after_expanded); return 0; } +#define str(s) #s +#define xstr(s) str(s) +#define FT(s) int main() { char *before = "#define _GNU_SOURCE /* for asprintf */\n#include /* for free and system */\n#include /* for __FILE__ */\n#include \n#define str(s) #s\n#define xstr(s) str(s)\n#define FT(s) "; char *quine = s; char *after = "\nint i = %i;\nchar *file_name = %s%s;\nFT(xstr(FT(s)))\n"; if (i == 0) return 0; if ((strchr(file_name, '_')) != ((void*)0)) i--;char *kid_name; char *kid_name_c; char *after_expanded; char *cmd; asprintf(&kid_name, "Sully_%i", i); asprintf(&kid_name_c, "%s.c", kid_name); FILE *file = fopen(kid_name_c, "w"); asprintf(&after_expanded, after, i, "__FI", "LE__"); fprintf(file, "%s%s%s", before, quine, after_expanded); fclose(file); asprintf(&cmd, "clang %1$s -o %2$s ; ./%2$s", kid_name_c, kid_name); system(cmd); free(cmd); free(kid_name_c); free(kid_name); free(after_expanded); return 0; } int i = 5; char *file_name = __FILE__; -FT(str(FT(s))) +FT(xstr(FT(s))) diff --git a/C/3_Sully/Sully_exploded.c b/C/3_Sully/Sully_exploded.c index dd44263..22d8e7b 100644 --- a/C/3_Sully/Sully_exploded.c +++ b/C/3_Sully/Sully_exploded.c @@ -2,8 +2,8 @@ #include /* for free and system */ #include /* for __FILE__ */ #include -#define xstr(s) #s -#define str(s) xstr(s) +#define str(s) #s +#define xstr(s) str(s) #define FT(s) \ int main() \ { \ @@ -13,15 +13,15 @@ int main() \ #include /* for free and system */\n\ #include /* for __FILE__ */\n\ #include \n\ - #define xstr(s) #s\n\ - #define str(s) xstr(s)\n\ + #define str(s) #s\n\ + #define xstr(s) str(s)\n\ #define FT(s) "; \ char *quine = s; \ char *after = "\ \n\ int i = %i;\n\ char *file_name = %s%s;\n\ - FT(str(FT(s)))\n"; \ + FT(xstr(FT(s)))\n"; \ \ if (i == 0) \ return 0; \ @@ -52,4 +52,4 @@ int main() \ } int i = 5; char *file_name = __FILE__; -FT(str(FT(s))) +FT(xstr(FT(s))) diff --git a/notes.md b/notes.md index a1265a3..ba7dbd0 100644 --- a/notes.md +++ b/notes.md @@ -341,28 +341,28 @@ int main() ``` #include -#define xstr(s) #s -#define str(s) xstr(s) +#define str(s) #s +#define xstr(s) str(s) #define MAIN(s) \ int main() \ { \ - char *quine = "#include \n#define xstr(s) #s\n#define str(s) xstr(s)\n#define MAIN(s) " \ + char *quine = "#include \n#define str(s) #s\n#define xstr(s) str(s)\n#define MAIN(s) " \ s \ - "\n\nMAIN(str(MAIN(s)))\n"; \ + "\n\nMAIN(xstr(MAIN(s)))\n"; \ printf(quine); \ return 0; \ } -MAIN(str(MAIN(s))) +MAIN(xstr(MAIN(s))) ``` **expands to :** ``` int main() { - char *quine = "#include \n#define xstr(s) #s\n#define str(s) xstr(s)\n#define MAIN(s) " - "int main() { char *quine = \"#include \\n#define xstr(s) #s\\n#define str(s) xstr(s)\\n#define MAIN(s) \" s \"\\n\\nMAIN(str(MAIN(s)))\\n\"; printf(quine); return 0; }" - "\n\nMAIN(str(MAIN(s)))\n"; + char *quine = "#include \n#define str(s) #s\n#define xstr(s) str(s)\n#define MAIN(s) " + "int main() { char *quine = \"#include \\n#define str(s) #s\\n#define xstr(s) str(s)\\n#define MAIN(s) \" s \"\\n\\nMAIN(xstr(MAIN(s)))\\n\"; printf(quine); return 0; }" + "\n\nMAIN(xstr(MAIN(s)))\n"; printf(quine); return 0; } @@ -371,11 +371,11 @@ int main() **output :** ``` #include -#define xstr(s) #s -#define str(s) xstr(s) -#define MAIN(s) int main() { char *quine = "#include \n#define xstr(s) #s\n#define str(s) xstr(s)\n#define MAIN(s) "s"\n\nMAIN(str(MAIN(s)))\n"; printf(quine); return 0; } +#define str(s) #s +#define xstr(s) str(s) +#define MAIN(s) int main() { char *quine = "#include \n#define str(s) #s\n#define xstr(s) str(s)\n#define MAIN(s) "s"\n\nMAIN(xstr(MAIN(s)))\n"; printf(quine); return 0; } -MAIN(str(MAIN(s))) +MAIN(xstr(MAIN(s))) ``` **victory ;)**