Originally Posted by stevea
C++ & Java aren't very different syntactically, tho' C++ certainly has more features esp the pointer legacy stuff.
OTOH the portability of these two languages is very different. The source is fairly portable, but only Java produces really portable "binary".
You need to read up on your options and the differences.
Pointers and manual memory management aren't legacy stuff. They're necessary for systems-level development, something C/C++ quite adept at - and something managed languages fail miserably at doing. There are safe Native languages like Ada for those who want extremely robust system with Native Code Execution speed.
C++ Code is portable if you use the same compiler. Aside from that, you have to be very careful with how you code, because C compilers are notorious for having their own little "extras" which are so convenient that developers can't help but use them.
Generally, the OS vendor will have a better C++ compiler than the alternatives. Sun Studio on Solaris, Visual Studio on Windows, and HP's C++ compiler on HP-UX are all better C/C++ compilers than GCC. The benefit of GCC is that you don't have to worry about the quirks of several compilers, and can disregard GCC's because it runs on all of those platforms, anyways...
Managed Languages and their Libraries (specifically .NET and Java) provide powerful abstractions, so you can usually move from one platform to the next without fear of incompatibilities and requiring few source changes - provided you aren't using platform-independent libraries. C# and .NET and cross-platform. The Libraries (WinForms, WPF, WCF, etc.)... Not so much.
Originally Posted by fpmurphy
You state that you want to build "platform independent software with sound and graphic integrated." Sound and graphics are generally not platform agnostic.
They are platform agnostic if you can find a suitable abstraction supported by the systems you wish to target. The issue with Sound and Graphics isn't the platform (as in OS or Processor Architecture), but the actual Sound and Graphics hardware. You never know if the hardware anyone uses to run your software will actually support the API calls you use. Linux users are notorious for using recycled software.
You might develop on a system with recent model SoundBlaster Gaming Card and a GeForce 9800, but someone may run your software on system with a built-in sound card and a Radeon 9200 SE on a system that otherwise runs flawlessly.
Cause we should all have to upgrade hardware to run general-purpose end-user software, right?
EDIT: Also, learning the syntax of a language is easy (couple weeks, a month at the most for a reasonably and honestly interested person). Learning how to code to the point that you can productively churn out code is not. That can take several months or longer, and you should get ahold of some good books. Most online tutorials are terrible. MSDn is also a good, searchable, reference... Sun also has excellent documentation. You may want something more specific to the GCC toolchain, though.
And do learn how to use a debugger (like GDB) :P