c++cunions

C: Where is union practically used?


I have a example with me where in which the alignment of a type is guaranteed, union max_align . I am looking for a even simpler example in which union is used practically, to explain my friend.


Solution

  • I usually use unions when parsing text. I use something like this:

    typedef enum DataType { INTEGER, FLOAT_POINT, STRING } DataType ;
    
    typedef union DataValue
    {
        int v_int;
        float v_float;
        char* v_string;
    }DataValue;
    
    typedef struct DataNode
    {
        DataType type;
        DataValue value;
    }DataNode;
    
    void myfunct()
    {
        long long temp;
        DataNode inputData;
    
        inputData.type= read_some_input(&temp);
    
        switch(inputData.type)
        {
            case INTEGER: inputData.value.v_int = (int)temp; break;
            case FLOAT_POINT: inputData.value.v_float = (float)temp; break;
            case STRING: inputData.value.v_string = (char*)temp; break;
        }
    }
    
    void printDataNode(DataNode* ptr)
    {
       printf("I am a ");
       switch(ptr->type){
           case INTEGER: printf("Integer with value %d", ptr->value.v_int); break;
           case FLOAT_POINT: printf("Float with value %f", ptr->value.v_float); break;
           case STRING: printf("String with value %s", ptr->value.v_string); break;
       }
    }
    

    If you want to see how unions are used HEAVILY, check any code using flex/bison. For example see splint, it contains TONS of unions.