Mapping enum to string in C Language

Mapping enum to string in C Language

Sometimes we require to map enum value to string. Say for example, mapping error enum value to string for storing in logs. Here I would like to explain a technique which is used in Linux kernel. It seems more efficient and easy to map.

Step 1:

Define enum as we normally do in c-programing. For example:

enum fruits {
    APPLE = 0,
    MANGO,
    ORANGE,
    BANANA,
    MAX_FRUITS,
};

Step 2:

Define constant array of strings as follows. This will helps to map enum to strings.

static const char * const fruit_names[] = {
	[APPLE] = "Apple",
	[MANGO] = "Mango",
	[ORANGE] = "Orange",
	[BANANA] = "Banana"
};

Lets test it

Here is a small code to test the enum and strings that we defined:

int main(void)
{
    int i = 0;
    printf("The name of fruit is %s\n", fruit_names[APPLE]);
    printf("The name of fruit is %s\n", fruit_names[BANANA]);
    printf("The name of fruit is %s\n", fruit_names[MANGO]);
	
    /*  Using for loop */
    printf("\nUsing loop to retrieve strings\n\n");
    for(i =  0;  i < MAX_FRUITS; i++)
       printf("The name of fruit is %s\n", fruit_names[i]);

    return 0;
}

Lets compile and see the results:

gcc map_enum_to_string.c -o map_string
./map_string

The name of fruit is Apple 
The name of fruit is Banana 
The name of fruit is Mango 

Using loop to retrieve strings 

The name of fruit is Apple 
The name of fruit is Mango 
The name of fruit is Orange 
The name of fruit is Banana

That's all

Its so simple to map enum to strings. And also easy to modify. May be we can use header file and a function(for checking boundary conditions) to retrieve string in larger systems. 

References

Code in Linux kernel: https://github.com/torvalds/linux/blob/master/drivers/iio/industrialio-core.c

Stackoverflow: https://stackoverflow.com/questions/147267/easy-way-to-use-variables-of-enum-types-as-string-in-c

For an alternative that will automatically generate lookup tables - possible to use the debug information generated by the compiler. See: https://medium.com/@yair.lenga/automatic-enum-stringification-in-c-via-build-time-code-generation-659b67133125 The approach also address enums with sparse ranges (or negative values), which do not fit into this solution.

Like
Reply

Simple and easily expandable as your program grows -- thanks.

To view or add a comment, sign in

Others also viewed

Explore content categories