Here is some software that I use at the moment, just the ones I can think of off the top of my head. Note: everything mentioned here is free software; most of it under the GNU GPL, most of the rest under even less restrictive licenses, and all of it meets the Debian Free Software Guidelines and thus likely also falls under the Open Source Definition.
If you haven't already, you should try make and a debugger. They're absolutely essential. The names vary depending on what compiler you are using, but for GCC/g++, it's "make" and "gdb" (the GNU Debugger).
Some general programming software that I use under Linux (but works on other platforms unless otherwise noted).
- Valgrind: an excellent tool for detecting memory leaks, buffer overruns, and other errors of the sort. (Linux only.)
- Kate, KDevelop: Very nice IDEs for KDE (specifically, Qt, which means you could probably run them under Windows as well).
- Doxygen: takes your source code and generates documentation. Works best if you write special Doxygen comments, but you can use any source code written in C, C++, or Java (and maybe other languages as well).
I know it has already been mentioned, but version control systems are essential. Here are some of them, as well as related programs.
- Concurrent Versions System (CVS): once (and possibly still) the most widely-used version control system. It's basically a front end to RCS that supports multiple files.
- Subversion (SVN): a very nice version control system that supposively fixes some of CVS's issues. For example, versions are project-wide, so you don't have to compile main.c version 1.4 with network.c version 1.7.
- Kompare: the nicest (graphically) diff program I've ever come across. Check out the
- screenshot in Wikipedia and you'll see what I mean.
- kdesvn: the graphical client for subversion that I use, based on RapidSVN, but there are many of them out there. Makes using a version control system easier.
Do free libraries count? If so, some SDL ones, which are all written in C and thus work with C natively and are easy to use in C++:
- SDL: a portable, cross-platform graphics and sound and I/O library. It contains all you need to write a graphics application such as a game, and your resulting program runs almost anywhere, from Windows 98 to 64-bit Linux to Mac OS X. (Believe me, I've tried it on all three.)
- SDL libraries list: a huge list of libraries compatible with the SDL. The search option only lets you search titles, however, so I find it's best to display all results (which my link does) and use your browser's search feature.
- SDL_image: with this, you can open images in almost any format. Let's see; it supports BMP, GIF, JPEG, LBM, PCX, PNG, PNM, TGA, TIFF, XCF, XPM, and XV. It's really easy to use, too. You just call IMG_Load(filename), and it figures out the type of the file etc.
- SDL_ttf: TrueType fonts for the SDL. You can load ordinary fonts like FreeMono.ttf (Linux) or Courier New (Windows). The resulting text looks much better than bitmap fonts. It's a bit difficult to use, but the result is worth it.
- SDL_gfx: support for drawing graphics primitives such as: lines, circles, polygons, ellipses, pies, in normal, anti-aliased (smoothed), and filled modes (and sometimes anti-aliased filled, too). Also supports image rotating and scaling or zooming. It also has other features that I've never figured out.
I can't recommend any particular GUI library for the SDL, because I like to write my own. But there are many. Search the libraries list above for a few. Or see:
- The GUI Toolkit: a very comprehensive list of GUI libraries. It's tough to read, but you probably won't find a more complete list anywhere: