I will answer the question by pointing out some facts and advantages over languages. Make the choice on your own:C can be compiled in any architecture.One of the first things that happens when a new architecture arises is the creation of a compiler for the C language (perhaps based on an existing compiler, just adding a new target). The point is that whatever architecture you find, it's practically guaranteed that you can write a C program and compile it. This is because C is a "simple" and quite low-level language. C++ is immensely more complex and is likely to find architectures that have no support for language.However, it is necessary to say that this difference between languages is less and less significant as compiler collections become more widely used. For GCC or Clang (LLVM), for example, you can add new backend that compiles the specific intermediate representation of compilers for your target architecture and will immediately support all the languages (frontend) that the compiler supports. Being microcontrollers, the GCC supports many of their architectures, being perfectly acceptable to write a C++ program instead of the usual C.C is faster than C++Lie! That's a more historical myth than something else. The fact is that C++ compilers are much more complex than C compilers, so it is difficult to apply optimizations to transformations that benefit from speed. But today's compilers are much better than yesterday's compilers and that difference is widely overcome. The affirmative actually reverses. C++ has features that allow you to write code more efficient than C while maintaining elegance elegance elegance. Observe templates and functions constexpr as an example. But of course, in C++ you have many high-level features that would be less efficient than dealing with the simplest implementation. Of course it is less efficient to use std::regex instead of writing a parser that processes a const char* in the hand. But everything that can be written in C, can be written in C++ with exactly the same efficiency. There are only advantages.C has a well-defined ABI within each systemBoth Linux and Windows define an API in C for applications to use. Along with this, they also define an ABI, an assembly way to pass the arguments to these system functions and to name them. Therefore any compiler will use the same mechanism as the operating system to write the passage of arguments and the nomenclature of the internal functions of the code. This means that given any binary library, I can carry a symbol and call it a function with the confidence that I'm doing it right.In C++ there is no well-defined convention as to this, each compiler uses a different ABI and it is not difficult to see different versions of the same compiler using a different ABI to accommodate some new feature. So it is much more complicated to write an interface for C++. Most scripting languages, for example, only accept native extensions that have been written in C (or C++, but exporting an interface in C form).C is universalYou can compile C for almost any architecture. In any environment you will have a stable ABI. So if you want to make a tool that manages portable code, use C as output is perfectly acceptable. Watch bison as an example. Still, I would advise to take a look at what LLVM has to offer in this respect. You generate assembly in the LLVM style (it is not as low as the assemblies for real machines) and it produces an executable on the target platform. That's what Clang does.C++ provides zero-cost resourcesA C++ motto is zero overhead, zero overload. If you do not use a particular feature, you do not pay for it. This principle ensures that language is full of resources, but at the same time it is as fast as you want. Just avoid some key points like RTTI (run-time type identification), polymorphism or exceptions. Language can also work without the operating system, just don't use the standard library and write everything on your own.C compilers are faster and spend less memoryReally. Overall compiling a C program is faster because it is a simpler language. The main reason for code C++ being heavier to compile are templates. They produce a lot of additional specialized functions that need to receive inline and be optimized. Besides the calculations that happen in compilation time via constant expressions. Who has compiled something that includes boost Say it. Anyway, this is rarely a decisive reason to choose a language about the other, but a point to consider in very large projects.C is the most used in open source projectsThis is another primarily historical factor. At the age of 20 or 30, when most of the major projects we see today were crawling, C++ was not so popular and C++ compilers were much lower than C in quality and performance issues. So going to C was a natural choice. And today converting a project from this port to a different language is a monumental task, http://gcc.gnu.org/wiki/cxx-conversion . With C++ it is possible to write code much cleaner, modularized and organized, the advantages are many. However there is still a big and http://harmful.cat-v.org/software/c++/linus to use C++.C is obsolete. C++ is the replacement.Another mistake. C and C++ are different languages, although they share common parts. Each has its use. But none of them are dead. New reviews and updates are created regularly, keeping them modern. As an example, in 2011 both gained native support for threads. Another point to be clear is that not every C code is valid C++ code, especially the conversion between types of hands. In C there are even features that have not yet reached the C++, like the keyword restrict, mentioned by @luiscubal in comments, although most compilers support as an extension.