{"id":8048,"date":"2025-11-29T09:19:11","date_gmt":"2025-11-29T08:19:11","guid":{"rendered":"https:\/\/web-dev-weissblau.de\/microconsult\/?p=8048"},"modified":"2026-02-11T06:24:45","modified_gmt":"2026-02-11T05:24:45","slug":"who-is-afraid-of-evil","status":"publish","type":"post","link":"https:\/\/www.microconsult.de\/en\/wer-hat-angst-vorm-boesen\/","title":{"rendered":"Who&#039;s afraid of the evil &quot;++&quot;?"},"content":{"rendered":"<h2>Why C++ makes sense down to the driver level<\/h2>\n<p>Author: Matthias Bauer, redlogix Software &amp; System Engineering GmbH<\/p>\n<h3>Contribution \u2013 Embedded Software Engineering Congress 2015<\/h3>\n<p><strong>Some prejudices are incredibly persistent. For example, this one: C++ is unsuitable for extremely resource-poor systems. This is simply not true! On the contrary, using the right C++ language features offers invaluable advantages, especially for systems with extremely limited resources.<\/strong><\/p>\n<p>By using the compiler as a code generator, programs can be created from generic, flexibly configurable software components, without any runtime overhead compared to a custom solution. This is particularly interesting for applications that are integrated on platforms with very limited resources (e.g., code storage, RAM, processing speed, energy).<\/p>\n<h2>Does &quot;++&quot; indicate a greater need for resources?<\/h2>\n<p>At a very superficial glance, one might actually conclude that software developed in C++ generates larger binary code than its counterpart in C.<\/p>\n<p>For example, if you build a simple Hello World program in C and C++ using the Keil uVision development environment for a Cortex-M3 target, C++ skeptics will initially feel vindicated: While the program written in C occupies code memory in the low single-digit kilobyte range, the C++ program occupies more than 30 kBytes (see Figures 1 &amp; 2).,\u00a0<a title=\"Who&#039;s afraid of the evil &quot;++&quot;? (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/11\/fachinfo_ese_implementierung_wer_hat_angst_vorm_boesen____redlogix_bauer.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>).<\/p>\n<p>However, the increased code memory consumption is not due to the C++ programming language itself. Using certain parts of the Standard Template Library introduces library code that is not optimized for embedded applications and, in some cases, utilizes C++ features that are better left out in applications with extremely limited resources (e.g., exception handling).<\/p>\n<p>Therefore, caution is advised when using the STL on embedded targets for several reasons. For example, the collection classes use dynamic memory allocation by default, which sooner or later leads to memory fragmentation problems on systems without virtual memory management.<\/p>\n<p>The C++ programming language itself can be used without hesitation, without tying up more valuable system resources than C. With C++, you only pay for the features you actually use, using the currency of &quot;resources.&quot; Of course, you should know exactly which language features might incur additional resource costs.<\/p>\n<h2>Overview of resource costs of some C++ language features<\/h2>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td><strong>Language feature<\/strong><\/td>\n<td><strong>Resource costs<\/strong><\/td>\n<td valign=\"top\"><strong>Recommended use (*)<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Classes without virtual methods<\/td>\n<td>No additional resource requirements compared to normal C functions that work on data structures.<\/td>\n<td valign=\"top\" width=\"111\">without restriction<\/td>\n<\/tr>\n<tr>\n<td>Inheritance<\/td>\n<td>No additional resources are required. A class that inherits members from base classes does not require more code or data storage than if it had defined all members itself.<\/td>\n<td valign=\"top\" width=\"111\">without restriction<\/td>\n<\/tr>\n<tr>\n<td>Use of access protection for class members (private, protected, public)<\/td>\n<td>No additional resources are required, as the check takes place exclusively at compile time. The concept of inline functions also eliminates the costs associated with public getter and setter methods for accessing protected member variables.<\/td>\n<td valign=\"top\" width=\"111\">without restriction<\/td>\n<\/tr>\n<tr>\n<td>Virtual methods<\/td>\n<td>Typically (depending on the compiler), additional code memory is required for method jump tables and data memory for managing a pointer to them.<br \/>\nIf one wanted to recreate virtual methods in C \u201eby hand\u201c, it would incur at least equally high resource costs.<\/td>\n<td valign=\"top\" width=\"111\">with care<\/td>\n<\/tr>\n<tr>\n<td>Exceptions<\/td>\n<td>Code storage and data storage (implementation varies significantly in efficiency from compiler to compiler)<\/td>\n<td valign=\"top\" width=\"111\">It&#039;s best not to use it<\/td>\n<\/tr>\n<tr>\n<td>Using templates<\/td>\n<td>They are fully evaluated at compile time, therefore no additional resources are required.<\/p>\n<p>However, their careless use can lead to a significant increase in the need for code storage.<\/td>\n<td valign=\"top\" width=\"111\">with care<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>Templates, in particular, make the C++ language extremely interesting for embedded applications. They allow the C++ compiler to be used as a code generator, producing highly efficient code at compile time from generic and therefore flexibly deployable software components. The concept of code generation can even be used effectively down to the driver level. To illustrate this, let&#039;s consider a driver for digital inputs that, for example, should call an application function from the interrupt context on every rising pulse edge.<\/p>\n<p>The ISR routine of such a driver typically consists of two parts:<\/p>\n<ol>\n<li>A hardware-dependent part checks whether the interrupt was triggered by the relevant hardware component (in our case, the input pin) (if multiple sources can trigger the interrupt) and resets the interrupt if necessary.<\/li>\n<li>Calling a callback routine that is not part of the driver but contains application-specific functionality (see Figure 3,\u00a0<a title=\"Who&#039;s afraid of the evil &quot;++&quot;? (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/11\/fachinfo_ese_implementierung_wer_hat_angst_vorm_boesen____redlogix_bauer.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>).<\/li>\n<\/ol>\n<h2>Case study: A driver with ISR in C<\/h2>\n<p>The ISRs of drivers implemented in C typically call the application-specific callbacks via function pointers. The relevant code snippets of such a driver then look like this (see Figure 4).,\u00a0<a title=\"Who&#039;s afraid of the evil &quot;++&quot;? (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/11\/fachinfo_ese_implementierung_wer_hat_angst_vorm_boesen____redlogix_bauer.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>).<\/p>\n<p>With this approach, the callback routine only needs to be communicated to the driver at runtime, which often allows for unnecessary flexibility. In most cases, the callback routine that the driver should call is already determined at compile time.<\/p>\n<h2>The same driver with C++<\/h2>\n<p>If the driver is implemented using the C++ programming language, arbitrary callback functions can be included in the driver without any function pointers. This is achieved using C++ templates and the concept of template specialization. A driver implemented in C++ can therefore look like this (see Figure 5).,\u00a0<a title=\"Who&#039;s afraid of the evil &quot;++&quot;? (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/11\/fachinfo_ese_implementierung_wer_hat_angst_vorm_boesen____redlogix_bauer.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>).<\/p>\n<p>Where the driver wants to execute a callback, it simply calls the static method `invokeCallback()` of the class template `TDriverIsrCallback`. By specializing the class template `TDriverIsrCallback`, it is possible to define for each driver what should happen in this static method, i.e., to call the desired application-specific callback routine from there (see Figure 6).,\u00a0<a title=\"Who&#039;s afraid of the evil &quot;++&quot;? (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/11\/fachinfo_ese_implementierung_wer_hat_angst_vorm_boesen____redlogix_bauer.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>).<\/p>\n<p>When the compiler parses the driver class code, the specialization does not yet need to be available to it. Therefore, the specialization can be implemented outside the driver code module, ensuring the driver remains generic and independent of the application code. The code module with the template specialization shown serves as the link between the application modules and the drivers.<\/p>\n<p>Since the compiler optimizes away the invokeCallback() call as an inline method, binary code is generated after code generation as if the callback routine had been called directly in the driver, as shown here (see Figure 7).,\u00a0<a title=\"Who&#039;s afraid of the evil &quot;++&quot;? (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/11\/fachinfo_ese_implementierung_wer_hat_angst_vorm_boesen____redlogix_bauer.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>).<\/p>\n<p>This technique offers the following advantages over the callback solution using function pointers:<\/p>\n<ul>\n<li>Less data storage, since no function pointer needs to be stored.<\/li>\n<li>Less code memory is required because the address of the callback function does not need to be populated using setCallbackFCT() during driver initialization.<\/li>\n<li>The compiler can even &quot;inline&quot; the application callback functions.<\/li>\n<\/ul>\n<p>The last point is particularly interesting: For short inline callback routines, the compiler places their contents directly into the driver ISR, meaning that no function is actually called from the ISR; saving the return address, the jump, and the return are therefore completely eliminated. This can be quite significant with very frequent interrupts.<\/p>\n<p>The somewhat unusual syntax for inserting callback routines using template specialization can be significantly simplified with a macro. In the redBlocks embedded software toolkit, where the technique presented here is used, the following macro is employed instead of template specialization as shown in Figure 6 (the second parameter, DigitalInputA0:: CBK_ON_INPUT_CHANGED, allows the selection of the callback if a driver has more than one callback routine; see Figure 8).,\u00a0<a title=\"Who&#039;s afraid of the evil &quot;++&quot;? (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/11\/fachinfo_ese_implementierung_wer_hat_angst_vorm_boesen____redlogix_bauer.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>).<\/p>\n<h2>Squaring the circle \u2013 reusable and no overhead?<\/h2>\n<p>The implementation approach shown allows for a clean separation of drivers into a hardware-independent high-level part and a hardware-dependent low-level part. The high-level part (e.g., responsible for data buffering in a UART driver) can work together with different low-level drivers on various hardware targets without any modifications, making it portable and reusable (see Figure 9).,\u00a0<a title=\"Who&#039;s afraid of the evil &quot;++&quot;? (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/11\/fachinfo_ese_implementierung_wer_hat_angst_vorm_boesen____redlogix_bauer.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>).<\/p>\n<p>Despite the clean modularization, the technique presented in this article does not incur any resource overhead. In contrast, the use of function pointers introduces unnecessary indirection in callbacks by dividing drivers into high-level and low-level parts.<\/p>\n<h2>Summary<\/h2>\n<p>With C++ templates, the C++ standard defines a powerful code generator that can be used in a targeted manner to create highly efficient code for resource-efficient embedded systems from generically reusable software components. This allows for the implementation of a maintainable, modular software architecture down to the driver level without additional resource costs.<\/p>\n<p>The technology presented here is used in the redBlocks component library and is used, among other things, to integrate embedded software into the SiL environment of the redBlocks WYSIWYG simulator and to enable automated testing there.<\/p>\n<p>Using the redBlocks evaluation package (available via\u00a0<a href=\"https:\/\/www.redblocks.de\/\" target=\"_blank\" rel=\"noopener\">www.redblocks.de<\/a>The technique described here can be easily replicated.<\/p>\n<p><a title=\"Who&#039;s afraid of the evil &quot;++&quot;? (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/11\/fachinfo_ese_implementierung_wer_hat_angst_vorm_boesen____redlogix_bauer.pdf\" target=\"_blank\" rel=\"noopener\"><strong>Download the article as a PDF<\/strong><\/a><\/p>\n<hr \/>\n<h2>Implementation \u2013 our training &amp; coaching<\/h2>\n<p><strong>Do you want to bring yourself up to date with the latest technology?<\/strong><\/p>\n<p>Then find out more\u00a0<a title=\"MicroConsult Training\" href=\"https:\/\/www.microconsult.de\/en\/all-training-dates-complete-overview\/\" target=\"_blank\" rel=\"noopener\"><strong>here<\/strong>\u00a0<\/a>MircoConsult offers training courses\/seminars\/workshops and individual coaching on the topic of implementation\/embedded and real-time software development.<\/p>\n<p><strong>Training &amp; coaching on the other topics in our portfolio can be found here.\u00a0<a title=\"Training &amp; Consulting - all topics\" href=\"https:\/\/www.microconsult.de\/en\/training-beratung\/\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/strong><\/p>\n<hr \/>\n<h2>Implementation \u2013 Expertise<\/h2>\n<p>Valuable expertise in the field of implementation\/embedded and real-time software development is available.\u00a0<a title=\"Embedded and Real-Time Software Engineering\" href=\"https:\/\/www.microconsult.de\/en\/embedded-and-real-time-software-development\/\" target=\"_blank\" rel=\"noopener\"><strong>here\u00a0<\/strong><\/a>Available for you to download free of charge.<\/p>\n<p><a title=\"Embedded and Real-Time Software Engineering\" href=\"https:\/\/www.microconsult.de\/en\/embedded-and-real-time-software-development\/\" target=\"_blank\" rel=\"noopener\"><strong>To the specialist information<\/strong><\/a><\/p>\n<p><strong>You can find expertise on other topics in our portfolio here. <a title=\"MicroConsult Expertise\" href=\"https:\/\/www.microconsult.de\/en\/specialist-knowledge\/\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/strong><\/p>","protected":false},"excerpt":{"rendered":"<p>Warum C++ bis auf Treiberebene sinnvoll ist Autor: Matthias Bauer, redlogix Software &amp; System Engineering GmbH Beitrag &#8211; Embedded Software Engineering Kongress 2015 Manche Vorurteile halten sich hartn\u00e4ckig. Zum Beispiel dieses: C++ ist f\u00fcr extrem ressourcenarme Systeme nicht geeignet. Dabei stimmt das schlichtweg nicht! Vielmehr bringt der Einsatz der richtigen C++-Sprachmittel gerade f\u00fcr Systeme mit [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","inline_featured_image":false,"footnotes":""},"categories":[],"tags":[],"class_list":["post-8048","post","type-post","status-publish","format-standard","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Wer hat Angst vorm b\u00f6sen &quot;++&quot;? - MicroConsult Academy GmbH<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.microconsult.de\/en\/who-is-afraid-of-evil\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Wer hat Angst vorm b\u00f6sen &quot;++&quot;? - MicroConsult Academy GmbH\" \/>\n<meta property=\"og:description\" content=\"Warum C++ bis auf Treiberebene sinnvoll ist Autor: Matthias Bauer, redlogix Software &amp; System Engineering GmbH Beitrag &#8211; Embedded Software Engineering Kongress 2015 Manche Vorurteile halten sich hartn\u00e4ckig. Zum Beispiel dieses: C++ ist f\u00fcr extrem ressourcenarme Systeme nicht geeignet. Dabei stimmt das schlichtweg nicht! Vielmehr bringt der Einsatz der richtigen C++-Sprachmittel gerade f\u00fcr Systeme mit [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.microconsult.de\/en\/who-is-afraid-of-evil\/\" \/>\n<meta property=\"og:site_name\" content=\"MicroConsult Academy GmbH\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-29T08:19:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-11T05:24:45+00:00\" \/>\n<meta name=\"author\" content=\"weissblau media\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"weissblau media\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/wer-hat-angst-vorm-boesen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/wer-hat-angst-vorm-boesen\\\/\"},\"author\":{\"name\":\"weissblau media\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\"},\"headline\":\"Wer hat Angst vorm b\u00f6sen &#8222;++&#8220;?\",\"datePublished\":\"2025-11-29T08:19:11+00:00\",\"dateModified\":\"2026-02-11T05:24:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/wer-hat-angst-vorm-boesen\\\/\"},\"wordCount\":1397,\"commentCount\":0,\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.microconsult.de\\\/wer-hat-angst-vorm-boesen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/wer-hat-angst-vorm-boesen\\\/\",\"url\":\"https:\\\/\\\/www.microconsult.de\\\/wer-hat-angst-vorm-boesen\\\/\",\"name\":\"Wer hat Angst vorm b\u00f6sen \\\"++\\\"? - MicroConsult Academy GmbH\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#website\"},\"datePublished\":\"2025-11-29T08:19:11+00:00\",\"dateModified\":\"2026-02-11T05:24:45+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/wer-hat-angst-vorm-boesen\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.microconsult.de\\\/wer-hat-angst-vorm-boesen\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/wer-hat-angst-vorm-boesen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.microconsult.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Wer hat Angst vorm b\u00f6sen &#8222;++&#8220;?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#website\",\"url\":\"https:\\\/\\\/www.microconsult.de\\\/\",\"name\":\"MicroConsult Academy GmbH\",\"description\":\"Professionelle Schulungen, Beratung und Projektunterst\u00fctzung\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.microconsult.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\",\"name\":\"weissblau media\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"caption\":\"weissblau media\"},\"sameAs\":[\"https:\\\/\\\/www.microconsult.de\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Who&#039;s afraid of the evil &quot;++&quot;? - MicroConsult Academy GmbH","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.microconsult.de\/en\/who-is-afraid-of-evil\/","og_locale":"en_GB","og_type":"article","og_title":"Wer hat Angst vorm b\u00f6sen \"++\"? - MicroConsult Academy GmbH","og_description":"Warum C++ bis auf Treiberebene sinnvoll ist Autor: Matthias Bauer, redlogix Software &amp; System Engineering GmbH Beitrag &#8211; Embedded Software Engineering Kongress 2015 Manche Vorurteile halten sich hartn\u00e4ckig. Zum Beispiel dieses: C++ ist f\u00fcr extrem ressourcenarme Systeme nicht geeignet. Dabei stimmt das schlichtweg nicht! Vielmehr bringt der Einsatz der richtigen C++-Sprachmittel gerade f\u00fcr Systeme mit [&hellip;]","og_url":"https:\/\/www.microconsult.de\/en\/who-is-afraid-of-evil\/","og_site_name":"MicroConsult Academy GmbH","article_published_time":"2025-11-29T08:19:11+00:00","article_modified_time":"2026-02-11T05:24:45+00:00","author":"weissblau media","twitter_card":"summary_large_image","twitter_misc":{"Written by":"weissblau media","Estimated reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.microconsult.de\/wer-hat-angst-vorm-boesen\/#article","isPartOf":{"@id":"https:\/\/www.microconsult.de\/wer-hat-angst-vorm-boesen\/"},"author":{"name":"weissblau media","@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a"},"headline":"Wer hat Angst vorm b\u00f6sen &#8222;++&#8220;?","datePublished":"2025-11-29T08:19:11+00:00","dateModified":"2026-02-11T05:24:45+00:00","mainEntityOfPage":{"@id":"https:\/\/www.microconsult.de\/wer-hat-angst-vorm-boesen\/"},"wordCount":1397,"commentCount":0,"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.microconsult.de\/wer-hat-angst-vorm-boesen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.microconsult.de\/wer-hat-angst-vorm-boesen\/","url":"https:\/\/www.microconsult.de\/wer-hat-angst-vorm-boesen\/","name":"Who&#039;s afraid of the evil &quot;++&quot;? - MicroConsult Academy GmbH","isPartOf":{"@id":"https:\/\/www.microconsult.de\/#website"},"datePublished":"2025-11-29T08:19:11+00:00","dateModified":"2026-02-11T05:24:45+00:00","author":{"@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a"},"breadcrumb":{"@id":"https:\/\/www.microconsult.de\/wer-hat-angst-vorm-boesen\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.microconsult.de\/wer-hat-angst-vorm-boesen\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.microconsult.de\/wer-hat-angst-vorm-boesen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.microconsult.de\/"},{"@type":"ListItem","position":2,"name":"Wer hat Angst vorm b\u00f6sen &#8222;++&#8220;?"}]},{"@type":"WebSite","@id":"https:\/\/www.microconsult.de\/#website","url":"https:\/\/www.microconsult.de\/","name":"MicroConsult Academy GmbH","description":"Professional training, consulting and project support","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.microconsult.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a","name":"weissblau media","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","caption":"weissblau media"},"sameAs":["https:\/\/www.microconsult.de"]}]}},"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/8048","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/comments?post=8048"}],"version-history":[{"count":6,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/8048\/revisions"}],"predecessor-version":[{"id":11632,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/8048\/revisions\/11632"}],"wp:attachment":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/media?parent=8048"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/categories?post=8048"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/tags?post=8048"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}