embedded c here. One of our partners sent us the API prototypes of the library functions they are using. There is an enum like :
typedef enum{
     val1 = 0, 
     val2 = 1, 
    [..]
} status;
The enum type is then typedefined as a structure:
typedef struct status status_t;
What's the meaning of this typedef? Has it some practical meaning? Do I have to handle it like a regular structure? I think that whit this approach I can convert an enumerator to a structure and I can access a member of the structure, but I am not sure. Any hint would be very appreciated. B.R. L.
On arm-gcc, GNU c99
These are two different types.
Structure names are in their own namespace.  So struct status is different from status.  The former is the name of a structure, while the latter is a typedef which refers to an unnamed enum.
The fact that the typedef name assigned to an enum is the same as the tag name given to a struct does not mean they are associated in any way as far as the compiler is concerned.
Consider the following valid code:
typedef enum
{
     STATUS1 = 0, 
     STATUS2 = 1
} status ;
// struct tag
//         |
//         V
struct status
{
    status status ;
    //  ^    ^
    //  |    |_______
    //  |           |
    // type_name  member_name
} ;
typedef struct status status_t ;
//                       ^
//                       |
//                      Type alias
int main()
{
    // The following is valid    
    status_t status_structure ;
    status_structure.status = STATUS1 ;
    // So is this    
    struct status status ;
    status.status = STATUS1 ;
    return 0;
}
The type name status is distinct from both the member name status and the struct tag status.  Somewhere in the code given, or possibly not included but necessary, is a separate definition of a struct also called status.
In C, the struct tag on its own is not a type identifier, so there is no ambiguity struct status is not the same type as the enum type alias status.  It is not necessarily a good idea, but it is not invalid.  It would of course fail if C++ compilation were used because then for struct status, status would be a type name, so would clash with the enum alias status.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With