I have this macro code, which allows me to define both a C enum and a list of the enumerated names as strings using one construct. It prevents me from havi
See the suggestions Mu Dynamics 'Enums, Strings and Laziness'; these are at least related to what you're after.
Otherwise, look at the Boost Preprocessor collection (which is usable with the C preprocessor as well as the C++ preprocessor).