For some peculiar definitions of 'better'. <and nothing more>
There is /nothing/ that can be achieved more elegantly or more
efficiently in C, than it can be achieved in C++. Nothing. If you
think there's something then I'll listen intently.
Meanwhile there's loads of stuff that can be achieved more
elegantly in C++ than can be achieved in C.
The only reason at all to use a C compiler on code written today
in 2009 is the inavailability of a C++ compiler. Either that or you
like using "class" as an identifier. (By the way I don't doubt that
many people make such an argument regarding the amount of reserved
keywords in C++).
The distinction between a C programmer and a C++ programmer today
in 2009 is more cultural than factual. I, for instance, started out
programming in C++; I learned all the elaborate features of C++ inside
out... and then finally years later I ended up using C to do an
embedded systems project for college. I was using a C compiler because
there was no C++ compiler for the 8-Bit microcontroller I was using.
When I want to store a number of items in memory, I'll do the
following:
WhateverType my_array[whatever_number];
WhateverType *p = my_array;
WhateverType const *const pend = my_array + whatever_number;
do *p++ = GetDataFromSomewhere();
while (pend != p);
Regardless of whether I'm using a C compiler or a C++ compiler, this
is how I'll do it.
A more cultured C++ programmer would respond to my code with, "No,
that's C, this is how it's done in C++:"
std::vector<WhatEverType> blah blah blah
Regardless of how ingrained and how prevalent this C++ culture is, it
doesn't have any effect on the language itself. The C++ Language is
defined by the C++ Standard, and the C++ Standard mentions arrays as
well as std::vector. Specifically it does /not/ mention anything along
the lines of "arrays are considered deprecated and will be removed
from future editions of this standard".
The C++ programming language is a superset of the C programming
language. C++ can do everything C can do, and more. Therefore, it is
inherently better. (It's a different story for compiler implementors,
but I'm talking about programmers here).
Nowadays, unless I'm writing a program that would see great benefit
from using stuff like classes and templates, I usually write the code
in C so that it will be compilable on the greatest number of systems
possible (because you can be absolutely certain that the list of
platforms that have C compilers is a superset of the list of platforms
that have C++ compilers).
But again, C++ is C with more features added, and so is inherently
better. Sort of like how the Supersoaker 6000 is inherently better
than the Supersoaker 5000. It doesn't mean the Supersoaker 5000 has no
use, I mean you might decide to bring it into school because it's
smaller and less conspicuous in your schoolbag, but in its role as a
water gun, the Supersoaker 6000 is inherently better. But if you've
got a small schoolbag then fair enough use the 5000.