{"id":8061,"date":"2023-08-15T13:04:26","date_gmt":"2023-08-15T13:04:26","guid":{"rendered":"https:\/\/www.modernescpp.com\/?p=8061"},"modified":"2023-08-15T13:04:26","modified_gmt":"2023-08-15T13:04:26","slug":"60-terrible-tips-for-a-c-developer","status":"publish","type":"post","link":"https:\/\/www.modernescpp.com\/index.php\/60-terrible-tips-for-a-c-developer\/","title":{"rendered":"60 terrible tips for a C++ developer"},"content":{"rendered":"\n<p>Today, I want to present a mini book written Andrey Karpov from the <a href=\"https:\/\/pvs-studio.com\/en\/\" data-type=\"link\" data-id=\"https:\/\/pvs-studio.com\/en\/\">PVS-Studio<\/a> team. This book is educational and entertaining at the same time.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"780\" height=\"440\" src=\"https:\/\/www.modernescpp.com\/wp-content\/uploads\/2023\/08\/pvs.png\" alt=\"\" class=\"wp-image-8062\" srcset=\"https:\/\/www.modernescpp.com\/wp-content\/uploads\/2023\/08\/pvs.png 780w, https:\/\/www.modernescpp.com\/wp-content\/uploads\/2023\/08\/pvs-300x169.png 300w, https:\/\/www.modernescpp.com\/wp-content\/uploads\/2023\/08\/pvs-768x433.png 768w, https:\/\/www.modernescpp.com\/wp-content\/uploads\/2023\/08\/pvs-705x398.png 705w\" sizes=\"auto, (max-width: 780px) 100vw, 780px\" \/><\/figure>\n\n\n\n<p>The mini book contains 60 terrible coding tips \u2014 and explanations of why they are terrible. It&#8217;s a lot of fun to read them. The horrible tips are not fictional but based on actual code examples. <\/p>\n\n\n\n<p>Here are all of the rules:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID3C507882F6\">Terrible tip N1. Only C++<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID0D271FDDDD\">Terrible tip N2. Tab character in string literals<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#IDB41BD4E93A\">Terrible tip N3. Nested macros<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#IDC924C5C2DE\">Terrible tip N4. Disable warnings<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID435EA082EE\">Terrible tip N5. The shorter the variable name is, the better<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID94606C1576\">Terrible tip N6. Invisible characters<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID90FBE85088\">Terrible tip N7. Magic numbers<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID2FB1279C3F\">Terrible tip N8. int, int everywhere<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#IDA9A515DF38\">Terrible tip N9. Global variables<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID65E575FE16\">Terrible tip N10. The abort function in libraries<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID65184F1F33\">Terrible tip N11. The compiler is to blame for everything<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID1AB91381F6\">Terrible tip N12. Feel free to use argv<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID868BBB02D8\">Terrible tip N13. Undefined behavior is just a scary story<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID5091C9399D\">Terrible tip N14. double == double<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID187ED491C9\">Terrible tip N15. memmove is a superfluous function<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#IDDF14A4C843\">Terrible tip N16. sizeof(int) == sizeof(void *)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID416036BA0C\">Terrible tip N17. Don&#8217;t check what the malloc function returned<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#IDF8FA4F84E5\">Terrible tip N18. Extend the std namespace<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#IDF9E9B06226\">Terrible tip N19. Old school<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID246BDAB633\">Terrible tip N20. Compact code<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#IDB7EB1C5BDB\">Terrible tip N21. Professionals do not make mistakes<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID96E1A70D2C\">Terrible tip N22. Only students need analyzers<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID35235EEB82\">Terrible tip N23. Slap stuff together and deploy!<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID248C5408DA\">Terrible tip N24. When you ask for help on a forum, make sure people need to drag the information out of you. It will make things more interesting for everyone<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#IDDD3D7A1561\">Terrible tip N25. Diamond inheritance<\/a>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#IDFF12C92D2F\">Initialization of virtual base classes<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#IDB19EC1AFF7\">Virtual base classes and type conversion<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#IDE02BDA2A04\">Should we abandon virtual inheritance?<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID794AF8595C\">Pros of multiple inheritance<\/a><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID278ED3C145\">Terrible tip N26. I&#8217;ll do it myself<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID90FBAB5710\">Terrible tip N27. Delete stdafx.h<\/a>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID109BB1EAFA\">Why do we need precompiled headers<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#IDAF1975E32C\">How precompiled headers work<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID82395EFE7D\">How to use precompiled headers<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID6AA3FD887B\">Life hack!<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#IDF6C64FCA13\">What to include in stdafx.h<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#IDFB28E65F22\">Multiple precompiled headers<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID2BCA270914\">Typical errors with precompiled headers<\/a><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID34ED096527\">Terrible tip N28. An array on the stack is the best thing ever<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID9C0C1B9865\">Terrible tip N29. Nothing extra<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID1B7F3B9034\">Terrible tip N30. Unusual constructions<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID268C37B026\">Terrible tip N31. Use more code in header files<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#IDDA25F67C6F\">Terrible tip N32. The Goto statement<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID1C45333771\">Terrible tip N33. You don&#8217;t need enums<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID24F0449C28\">Terrible tip N34. Need to add a constant instance of the class everywhere? It&#8217;s more convenient to declare it in the header file<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#IDFFF0290D57\">Terrible tip N35. Declaring variables at the beginning of a function<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID13F93CF61F\">Terrible tip N36. Add everything, it might come in handy<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID49A9309CCC\">Terrible tip N37. Create your own h-quest<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID7BDC4D5EAE\">Terrible tip N38. C-style cast<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID3071EA3DAF\">Terrible tip N39. Versatility is cool<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID13D7A7FC05\">Terrible tip N40. You are the lord of pointers \u2014 do what you want<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID66AC3929D5\">Terrible tip N41. const is a redundant entity<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID888232C35D\">Terrible tip N42. Vintage is cool<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID5A5C08B0A2\">Terrible tip N43. Don&#8217;t initialize<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#IDC1474C5D4C\">Terrible tip N44. Trust everyone<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID51631D22EE\">Terrible tip N45. Don&#8217;t worry about naming variables<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID3A45903265\">Terrible tip N46. Write your code as if you are training for the IOCCC<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID3F618B4690\">Terrible tip N47. Have fun when writing code<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID6AEAAAA9A0\">Terrible tip N48. Everyone has their own style<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID232B6B456D\">Terrible tip N49. Overload everything<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID3B6410FEB0\">Terrible tip N50. Don&#8217;t believe in the efficiency of std::string<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID8FAA6CEF93\">Terrible tip N51. For as long as possible, resist using the new C++ standard<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#IDC1A58C49F9\">Terrible tip N52. Variables Reuse<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID1D08E22D5D\">Terrible tip N53. Answer the question &#8220;what?&#8221; in code comments<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID90250741A5\">Terrible tip N54. More multithreading<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#IDCCF06BB7C7\">Terrible tip N55. The fewer .cpp files, the better<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID348A0B12F0\">Terrible tip N56. More classes!<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#IDC23B400233\">Terrible tip N57. Reading books is no longer relevant<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#IDBFD6B0B60F\">Terrible tip N58. printf(str);<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID1DB826F3A5\">Terrible tip N59. Virtual functions in constructors and destructors<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#IDA0517163FA\">Terrible tip N60. No time to think, copy the code!<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID51EE2A1370\">Terrible tip N61. You can look beyond the array<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID282ADEC2B7\">The end<\/a><\/li>\n<\/ul>\n\n\n\n<p>What makes this mini book even more valuable is that it often refers to additional resources that let you drill deeper.<\/p>\n\n\n\n<p>I don&#8217;t know which is my favorite, but <a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1053\/#ID435EA082EE\">Terrible tip N5. The shorter the variable name is, the better<\/a> is among them, because the most important rule for good software is good names:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ID435EA082EE\">Terrible tip N5. The shorter the variable name is, the better<\/h2>\n\n\n\n<p><strong>Use one or two letters to name variables. This way you&#8217;ll fit a more complex expression on one line on the screen.<\/strong><\/p>\n\n\n\n<p>Indeed, this way helps you write much shorter code. However, it&#8217;ll be hard to read. In fact, the absence of normal variable names makes the code write-only. You can write it and even debug it right away, while you still remember what each variable means. But you won&#8217;t understand a thing there after a while.<\/p>\n\n\n\n<p>Another way to mess up the code is to use abbreviations instead of the normal variable names. Example: <em>ArrayCapacity<\/em> vs <em>AC<\/em>.<\/p>\n\n\n\n<p>In the first case, it is clear that the variable means &#8220;capacity&#8221; \u2014 the size of the reserved memory in the container [<a href=\"https:\/\/www.quora.com\/What-is-the-capacity-in-a-vector-in-C\" target=\"_blank\" rel=\"noreferrer noopener\">1<\/a>, <a href=\"https:\/\/stackoverflow.com\/questions\/6296945\/size-vs-capacity-of-a-vector\" target=\"_blank\" rel=\"noreferrer noopener\">2<\/a>]. In the second case, you&#8217;ll have to guess what <em>AC<\/em> means.<\/p>\n\n\n\n<p><strong>Should you always avoid short names and abbreviations? No.<\/strong> Be considerate. You can name counters in loops like <em>i<\/em>, <em>j<\/em>, <em>k<\/em>. This is common practice, and any developer understands code with such names.<\/p>\n\n\n\n<p>Sometimes abbreviations are appropriate. For example, in code implementing numerical methods, process modeling, etc. The code just does calculations using certain formulas described in the comments or documentation. If a variable in the formula is called <em>SC0<\/em>, then it is better to use this name in the code.<\/p>\n\n\n\n<p>For example, here is the declaration of variables in the COVID-19 CovidSim Model project (I <a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/0796\/\">checked<\/a> it once):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int n;             \/**&lt; number of people in cell *\/\nint S, L, I, R, D; \/**&lt; S, L, I, R, D are numbers of Susceptible,\n                    Latently infected, Infectious,\n                    Recovered and Dead people in cell *\/<\/code><\/pre>\n\n\n\n<p>This is how you can name variables. The comments describe what they mean. This naming allows you to write formulas compactly:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Cells&#91;i].S = Cells&#91;i].n;\nCells&#91;i].L = Cells&#91;i].I = Cells&#91;i].R = Cells&#91;i].cumTC = Cells&#91;i].D = 0;\nCells&#91;i].infected = Cells&#91;i].latent = Cells&#91;i].susceptible + Cells&#91;i].S;<\/code><\/pre>\n\n\n\n<p>I&#8217;m not saying this is a good approach and style. But sometimes it is rational to give short names to variables. However, be careful with any recommendation, rule, and methodology. You should understand when to make an exception and when not.<\/p>\n\n\n\n<p>Steve McConnell gives good arguments about how to name variables, classes, and functions in his book &#8220;Code Complete&#8221; (ISBN 978-0-7356-1967-8). Highly recommend to read it.<\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>To make the long story short: I highly recommend reading the 60 terrible tips.You will be educated and entertained at the same time,<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"222\" height=\"67\" src=\"https:\/\/www.modernescpp.com\/wp-content\/uploads\/2023\/07\/RainerGrimmDunkelBlauSmall.jpg\" alt=\"\" class=\"wp-image-7937\"\/><\/figure>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p> <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Today, I want to present a mini book written Andrey Karpov from the PVS-Studio team. This book is educational and entertaining at the same time. The mini book contains 60 terrible coding tips \u2014 and explanations of why they are terrible. It&#8217;s a lot of fun to read them. The horrible tips are not fictional [&hellip;]<\/p>\n","protected":false},"author":21,"featured_media":8062,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[360],"tags":[],"class_list":["post-8061","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"_links":{"self":[{"href":"https:\/\/www.modernescpp.com\/index.php\/wp-json\/wp\/v2\/posts\/8061","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.modernescpp.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.modernescpp.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.modernescpp.com\/index.php\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/www.modernescpp.com\/index.php\/wp-json\/wp\/v2\/comments?post=8061"}],"version-history":[{"count":8,"href":"https:\/\/www.modernescpp.com\/index.php\/wp-json\/wp\/v2\/posts\/8061\/revisions"}],"predecessor-version":[{"id":8070,"href":"https:\/\/www.modernescpp.com\/index.php\/wp-json\/wp\/v2\/posts\/8061\/revisions\/8070"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.modernescpp.com\/index.php\/wp-json\/wp\/v2\/media\/8062"}],"wp:attachment":[{"href":"https:\/\/www.modernescpp.com\/index.php\/wp-json\/wp\/v2\/media?parent=8061"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.modernescpp.com\/index.php\/wp-json\/wp\/v2\/categories?post=8061"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.modernescpp.com\/index.php\/wp-json\/wp\/v2\/tags?post=8061"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}