General: For smaller executables, #define WIN32_LEAN_AND_MEAN and VC_EXTRALEAN (assuming VS). Don't compile with debug symbols (you probably knew this). Use fewer libraries, and be user to only link the parts of libraries you need (VC's linker is pretty good about this, but don't touch optlink if you can help it).
Strip the relocation headers : Go to http://www.paehl.de/cms/oldtools and search for "ReduceEXE" (direct download link: http://www.paehl.de/reduce.zip ).
Run an executable packer: http://upx.sourceforge.net/ ... It uses up more memory at runtime and starts a bit slower, but the file is MUCH smaller.
If you care about file size more than speed, VC has an option to "optimize for size", which turns off some things like loop unrolling and function inling.
If you want to go hardcore (and don't care about all the software engineering advantages), try using fewer classes, preferring POS types without virtual functions instead. Wikipedia suggests that 6-13% of a program's execution time is spent doing virtual calls. Further, the vtables themselves take up (a LITTLE) memory, and size_t worth of memory at the beginning of every class instance (that has a virtual function) is allocated for the vtable pointer. IOW, "pure C" can end up being slightly faster (though if you find yourself emulating classes with function pointers, go back to C++).