Why C++ is a viable alternative to C in embedded systems design
So you're an embedded developer. You know that C is the right language for the job, although sometimes those maintenance cycles can be, well repetitive. You sometimes get that nagging feeling that you are coding like an automaton, repeatedly creating basic iterations over structures that are remarkably similar to ones from last week or last month.
You've heard the sales pitch for C++ as a powerful language but you also hear of horror stories about its large footprint, which makes it a no-go for embedded applications. Besides, it's so complicated: it must be really difficult to work with.
Does this have a familiar ring to it? The embedded development market covers a large range of application areas, including automotive, medical, defense and telecommunications. While C undoubtedly enjoys a good reputation as a strong and powerful language for embedded development, C++ does not have quite such a broad appeal. With today's capable and sophisticated C++ environments this is often an incorrect belief.
Why is C++ a viable alternative to C? As a language, it did of course grow from roots in C. Simply re-compiling a C project using a C++ compiler will yield more rigorous code type checking (there are some declaration incompatibilities that you may have to overcome first).
Once you embrace its core features, C++ offers a greater abstraction of data, which is an important objective for larger, more complex software systems. Object Orientation (OO) takes this abstraction a step further, where you can replace global "worker" functions with class functionality.
Templates are perhaps the biggest fear-factor against C++ usage, and most often quoted as the reason or presumption for large code-bloat experiences. But, in fact, well-designed template code offers elegant means of handling a variety of data-types consistently. C++'s Standard Library is an advertisement for such generic programming styles.
Exception handling is another area that suffers from FUD (Fear, Uncertainty, and Doubt). Exceptions in many C software systems will typically be a manual, programmatic task. This exception handling machinery can be replaced, albeit at a cost, with a more elegant C++ exception-based solution.
As always, the elegant solution only gets its due recognition when requirement changes are thrust on a development team. The speed with which well-crafted object-based designs can adapt in such circumstances is due, in part, to better abstraction and hiding of implementation.