diff --git a/notes.md b/notes.md index 85b3022..a1265a3 100644 --- a/notes.md +++ b/notes.md @@ -200,12 +200,7 @@ int main() } ``` -**in one line :** -``` -int main(){ char *quine = THIS_LINE_&_THE_LINES_AROUND; printf(quine); return 0; } -``` - -**whole code idea :** +**with macros :** ``` #include #define MAIN() int main() { char *quine = "BEFORE" "THIS_MACRO_ITSELF" "AFTER"; printf(quine); return 0; } @@ -219,21 +214,28 @@ MAIN() ``` #include -#define MAIN(s) int main() { char *quine = "#include \n#define MAIN(s) "s"\n\nMAIN(str(MAIN(s)))\n"; printf(quine); return 0; } +#define MAIN(s) \ + int main() \ + { \ + char *quine = "#include \n#define MAIN(s) " \ + s \ + "\n\nMAIN(s)\n"; \ + printf(quine); \ + return 0; \ + } MAIN(s) ``` -**expansions :** --> `int main() { char *quine = "#include \n#define MAIN(s) "s "\n\nMAIN(MAIN(s))\n"; printf(quine); return 0; }` - -**exploded view :** +**expands to :** ``` int main() { - char *quine = "#include \n#define MAIN(s) "s "\n\nMAIN(MAIN(s))"; - printf(quine); - return 0; + char *quine = "#include \n#define MAIN(s) " + s + "\n\nMAIN(s)\n"; + printf(quine); + return 0; } ``` @@ -245,21 +247,34 @@ int main() ``` #include -#define MAIN(s) int main() { char *quine = "#include \n#define MAIN(s) "s"\n\nMAIN(MAIN(s))\n"; printf(quine); return 0; } +#define MAIN(s) \ + int main() \ + { \ + char *quine = "#include \n#define MAIN(s) " \ + s \ + "\n\nMAIN(MAIN(s))\n"; \ + printf(quine); \ + return 0; \ + } MAIN(MAIN(s)) ``` -**expansions :** --> `int main() { char *quine = "#include \n#define MAIN(s) "int main() { char *quine = "#include \n#define MAIN(s) "s "\n\nMAIN(MAIN(s))"; printf(quine); return 0; }"\n\nMAIN(MAIN(s))\n"; printf(quine); return 0; }` - -**exploded view :** +**expands to :** ``` int main() { - char *quine = "#include \n#define MAIN(s) "int main() { char *quine = "#include \n#define MAIN(s) "s "\n\nMAIN(MAIN(s))"; printf(quine); return 0; }"\n\nMAIN(MAIN(s))\n"; - printf(quine); - return 0; + char *quine = "#include \n#define MAIN(s) " int main() + { + char *quine = "#include \n#define MAIN(s) " + s + "\n\nMAIN(MAIN(s))\n"; + printf(quine); + return 0; + } + "\n\nMAIN(MAIN(s))\n"; + printf(quine); + return 0; } ``` @@ -276,32 +291,45 @@ int main() #define MAIN(s) content s content MAIN(str(MAIN(s))) -/* EQUIVALENT */ +/* EQUIVALENT TO : */ #define MAIN(s) content s content MAIN((MAIN(s))) ``` -**we can use this extra step to stringify the content :** +**we can use this extra step to stringify the content with #s :** +``` +#define str(s) #s +#define MAIN(s) content s content +MAIN(str(MAIN(s))) +``` + +**example :** ``` #include #define str(s) #s -#define MAIN(s) int main() { char *quine = "#include \n#define str(s) #s\n#define MAIN(s) "s"\n\nMAIN(str(MAIN(s)))\n"; printf(quine); return 0; } +#define MAIN(s) \ + int main() \ + { \ + char *quine = "#include \n#define str(s) #s\n#define MAIN(s) " \ + s \ + "\n\nMAIN(str(MAIN(s)))\n"; \ + printf(quine); \ + return 0; \ + } MAIN(str(MAIN(s))) ``` -**expansions :** --> `int main() { char *quine = "#include \n#define MAIN(s) ""MAIN(s)""\n\nMAIN(str(MAIN(s)))\n"; printf(quine); return 0; }` - - -**exploded view :** +**expands to :** ``` int main() { - char *quine = "#include \n#define MAIN(s) ""MAIN(s)""\n\nMAIN(str(MAIN(s)))"; - printf(quine); - return 0; + char *quine = "#include \n#define str(s) #s\n#define MAIN(s) " + "MAIN(s)" + "\n\nMAIN(str(MAIN(s)))\n"; + printf(quine); + return 0; } ``` @@ -315,24 +343,28 @@ int main() #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 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; \ + } MAIN(str(MAIN(s))) ``` -**expansions :** --> `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"; printf(quine); return 0; }` - -**exploded view :** +**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"; - printf(quine); - return 0; + 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"; + printf(quine); + return 0; } ```