In all honesty, you won't reach the limited performance capability of either Java nor C#, so there really is no use to argue your decision as an independent game developer;
I hope you're joking with that comment! Haha...anyway, no, this is completely false. C# and Java are managed languages meaning they are run in a virtual machine which incurs severe computational overhead.
Every process can be divided into IO bursts and CPU bursts. If there are a lot of IO bursts, then the increased computational cost of using a managed language like Java or C# may not be noticed, because only a small number of operations were performed and the human cannot notice the difference between a few milliseconds.
For CPU-bound processes -- and it doesn't take a professional to write one, it is just any program that doesn't require a lot of user input constantly (like any 3D computer game) -- the difference generally is very noticeable.
Moreover, C# and Java are more abstract languages which are not designed with efficiency in mind. They were designed for simplicity of programming, and by reducing the amount of control of the programmer and encouraging highly object-oriented code, they naturally tend themselves to code that is inherently less efficient, even if they were fully compiled.
That's right, the object oriented nature of C++ adds to its inefficiency. However, since it is a fully compiled language, a lot of that inefficiency can be optimized away because..unlike Java...it does not have to be compiled-on-demand, so more time can be spent to get it right.
By the way, C++ is an extension of C, mostly adding object-oriented features but also a lot of other things such as templates, which are pretty much God's gift to the language. Even though they can be a bit more limiting than we would like sometimes, they allow for incredible amount of code reuse with zero runtime overhead.
C code will generally be more efficient than C++ code just because there are no opportunities to use a lot of things like inheritance, etc...although it should be noted that literally almost all C syntax has been subsumed as a subset of C++, so anything you wrote in C is usually also valid C++. C++ can offer better performance in practice by encouraging the use of templates as opposed to doing things in a less efficient, but easier to code way, in C; for example, this is way Bjarne Stroustroup always uses the std::sort as an example of why C++ can be faster than C.
Anyway, C++ is an operating system independent language. There is no such thing as a "GNU" version or a "Win32" version of C++. There is only C++, and various revisions of the standard. For example, C++0x is the upcoming version of the standard, and partial support is already available under TR1 for some compilers.
C++ is also a compiler independent language -- "[Microsoft] Visual C++" is a compiler, not a programming language.
Now, it is true that no compiler is 100% standards compliant, they will deviate in very small ways from the standard, but in general these differences can be ignored because they are so rare. The only thing limiting cross compatibility is the different kernel functions used by differing operating system which result in separate headers and libraries that need to be linked in.
There are plenty of libraries that provide OS-independent interfaces to the operating system API...most of them open source, if the C++ Standard Library does not provide them (as it does for console output or file writing, for example).
Many programmers like to revert to less efficient "scripting languages" for high level control, and rely on C or C++ for the time critical aspects. For example, EVE Online uses a lot of Python scripting language for most of its user interace -- of course, that's also why it suffers from pretty poor responsiveness. Scripting languages are great for controlling simple things like character actions in a game, stuff like...walk to person X, say Y, pick up item Z, etc. This is for gameplay programming, not engine programming.
Engine programming really should be done in C or C++. Almost everyone uses C++ now although Spore is one recent example of going back to C, IIRC.
As for graphics, C++ has no notion of graphics or even of the monitor. The two graphics libraries are OpenGL and Direct3D, a subset of DirectX. OpenGL used to be better in the old days, and it's cross platform...although it has much more limited capabilities now than Direct3D, which is Windows only, and that's why most games are made for Windows only.
Programming in OpenGL allows you to write OS-independent games, although it is much more of a pain in the ass to do. That's obviuously what Blizzard is using in Diablo, since it will be cross-platform.
If you start with C, you get almost no benefit for it since C is not used in programming anymore, except for maybe some little things.
That's not really true because C++ builds upon C and is backwards-compatible with it. For beginners it might be a bit too much to dive into object-oriented programming immediately. I would normally recommend getting a C++ compiler and IDE and start with basic C code and then move on to more complex things and eventually Windows/API programming.
I recommend a compact, free compiler/IDE such as DevC++. Internet is full of resources for beginners so learning a language these days is not really that hard. Just demands patience and commitment. Probably passion as well.
I've done very little programming but have been experimenting with some things lately.
I've got a question though, since this thread has become inhabited with a lot of programming people.. how do I pronounce C++? I know that C# is "C Sharp" but I don't know how I'm supposed to say the ++.
But yeah, the question in the OP seems to be pretty thoroughly answered. It seems like so many people are out there who know how to code. There are a whole lot more that despise even the thought of it though, I guess.
Rollback Post to RevisionRollBack
My art blog
My typical train of thought: Everything -> Sex -> Diablo