I'm surprised nobody has pointed out this basic fact:
DIRECTX 8 IS WRITTEN IN C++, AND YOU CANNOT USE IT WITHOUT USING C++.
(Granted, a rather limited use of C++, since it doesn't take advantage of templates, but oh well.)
Since DirectX is your one, and only, interface to the screen, your choices are quite limited on the Xbox. It's C++ or nothing. You don't have a choice.
That said:
antiflag, you're either helplessly retarded or you've never actually looked into what C++ can do. There's three advantages to using C++ over C:
1) Inheritance-based polymorphism. C++ removes the work of manually implementing vtables in a C struct. You can define all the code for, say, an object in a physics engine, and then say that all 3d objects are merely physics-engine-objects but with extra data describing what they look like.
2) Templates. In C++ you can create true polymorphic code which adapts itself to the data type. For example, you don't have to create a new link for every type of data you want to store in a linked list. You instead define a generic linked list called list<T>, and then you can use list<int>, list<char *>, or even list<list<unsigned long>>. It generates all the code for you for each type, and you can make it do the same for your own code too. You can do the same thing with other data structures -- arrays (vector<T>), deques, trees, hashes, etc. And the really slick part is that all of those data structures can be read through in the same way -- using the iterator objects you can go from beginning to end the same way whether it's a linked list or an array. And the compiler will optimize it all into just pointers anyways.
3) Overloading. In C, a function can have one meaning, and one meaning only. A function can't accept "either an int or a string" unless you make it take a union and a flag representing which of the union members is used. In C++, a function can be overloaded by its types, so you can have a single function that properly handles different cases based on what you feed it. For example, you can make a printf() that will actually output the contents of a variable based on its type, instead of just passing a % in a string and making sure it matches up to the right variable -- in fact, that's exactly what cout and << do.
And by the way, every version of the Unreal engine was written in C++, as was Quake 3, as is HL2. In fact, games are even driving innovation in C++ now -- Game Developer Magazine ran an article two issues ago about using some tricks with templates and reverse inheritance to make an extremely flexible vertex format that could store anything from raw mesh coordinates to arbitrary pixel shader data. About the only time anyone uses C in games now is when you're interfacing with hand-coded assembly -- and in the days of 3GHz processors, it just doesn't happen anymore. The last major game to have any hand-coded assembler was Quake 2, and that was only in its software rasterizer -- the game logic and the core engine was all C++. Funny that all the games you quote as using C are coming on a decade old now -- not a good reference point for Xbox coding, I think.
And "not matured" ? The core language has been an international standard (ISO/IEC/INCITS 14882) for five years now, and there's no end of libraries available for it to address its shortcomings (most notably, Boost). Both Visual C++ and gcc implement the standard closely, and there are even a couple of compilers which have managed to implement it to the letter.
In other words, you have no fucking clue what you're talking about, and I suggest you shut your fucking trap instead of giving people advice you can't back up with facts. There is nothing C++ can do that C can't... but it can let you finish it and move on to the next feature with a lot less typing.
Oh, and just FYI, you'll need to use VS.NET -- only the earliest versions of the XDK supported VS6,