Eric Sosman
6/6/2011 1:30:00 AM
On 6/5/2011 5:09 PM, Edward Rutherford wrote:
> Hello,
>
> I have enum and I want to turn it into a string using the number I've
> assigned to and concatenating a string to the end of it (or display an
> error string for invalid enums):
>
> typedef enum {
> Enabled = 1,
> Disabled = 2
> } State;
>
> #define State_String(x) ( \
> (x == Enabled) ? #x":Enabled" : \
> (x == Disabled) ? #x":Disabled" : \
> #x":Unknown" \
> )
>
> int main(void) {
> int i = Enabled;
> printf("State: %s\n", State_String(i));
> i = Disabled;
> printf("State: %s\n", State_String(i));
> i = Disabled + 1;
> printf("State: %s\n", State_String(i));
>
> return 0;
> }
>
> I want the output to look like
> 1:Enabled
> 2:Disabled
> 3:Unknown
>
> But the output is
> i:Enabled
> i:Disabled
> i:Unknown
>
> Anybody know how I can do this in a macro?
Off-hand, no. But why not just print the value if you want it?
#define State_String(x) ( \
(x == Enabled) ? "Enabled" : \
(x == Disabled) ? "Disabled" : \
"Unknown" )
...
printf ("State: %d:%s\n", i, State_String(i));
--
Eric Sosman
esosman@ieee-dot-org.invalid