Yep, I always wondered why so many people use concrete version defines that make the whole code unusable when a new version arrives.
I personally prefer minimizing usage of version defines replacing them with defines that declare the very feature. F.ex., RAD_2010 => GENERICS_OK (non-buggy generics). It's like using logically named identifiers instead of i1, jj3 etc