For fast, hard real-time code, pure C code has advantages. Firstly, it is important to avoid malloc and new. Memory layouts need to be fixed, such that ISRs and DMA devices know that the memory is in a fixed location and ready for access. There are special memory allocation calls for non-paged memory (memory that can't be swapped out to disk.) It is really hard to beat C for this type of code.
C++ also works. However, for low-level code speed is important. The biggest danger with C++ is someone using the standard template library or standard C++ calls, which implicitly call new and malloc.
Duuude, that's so wrong. First of all, your C code runs in C++. Period. Second of all, whatever C can do, C++ can do better because templates can actually let compilers optimize based on the data type, as well as a few other things. And that thing about someone using the STL which call new and malloc” is like saying that the standard C library has malloc, so someone might call it.
No, wherever you have C, C++ can do a better job. This is already proven time and time again in the past 20 years, there's no need to debate this.
I encountered one company determined to write a hard real-time system in C#. Not so sure about that ...
You can also write C# without pissing on your own hands. Depending on what the system wants to do, C# might be a good option. I still would lead people towards C++, but C# might work in certain situations.