So what should I know to write good
clean code?
The code itself is about the same. In fact, while I haven't used recent versions of Visual Studio, my experience with gcc is that its support for the C++ and C0X standards is superior to VS 2005.
Also, are there popular unit-testing
frameworks for c++ like nunit?
Oh, definitely. There are a ton of them, and more all the time.
What's a good ide other than vi for
the same?
The IDE du jour on Linux is Eclipse, but I find it complicated to set up. Mostly, I use a command line to do builds, and a combination of gedit and kate for text editing. There are various other new text editors coming out all the time, too.
How different is c++ on
linux from c++ on windows?
Here are a couple of things:
- gcc's pragmas don't give you the same fine-grained control over the compiler errors and warnings that Visual Studio does.
- One of my favorite tricks on Windows and Mac OS doesn't work on Linux. That trick is to write a DLL/dylib using C++ internals, export a C API, and then be able to call into it from C programs. Linux shared objects (the local equivalent of a DLL) can't really do that easily, because the C++ standard library .so isn't in the default search path. If you don't do a bunch of weird stuff to your C program, it will fail as soon as it dynamically loads your .so at runtime: your .so will try to dynamically load the standard library .so, it won't find it, and then your program will exit.