> And, closer to something I've needed more than once, how do you give your program an int and string version number with only one thing to modify?
This is not very elegant, and you have to split your version number to major and minor part, but it does the job. Oh, yes, minor version must be between 0 and 99 (inclusive).
#define VERSION_MAJOR 2
#define VERSION_MINOR 9
#define VERSION_INT (VERSION_MAJOR * 100 + VERSION_MINOR)
#define STRINGIFY2(x) #x
#define STRINGIFY(x) STRINGIFY2(x)
#if VERSION_MINOR<10
#define VERSION_STR STRINGIFY(VERSION_MAJOR) ".0" STRINGIFY(VERSION_MINOR)
#else
#define VERSION_STR STRINGIFY(VERSION_MAJOR) "." STRINGIFY(VERSION_MINOR)
#endif