Why should we typedef a struct so often in C?

后端 未结 15 2914
無奈伤痛
無奈伤痛 2020-11-21 23:58

I have seen many programs consisting of structures like the one below

typedef struct 
{
    int i;
    char k;
} elem;

elem user;

Why is i

15条回答
  •  一整个雨季
    2020-11-22 00:12

    At all, in C language, struct/union/enum are macro instruction processed by the C language preprocessor (do not mistake with the preprocessor that treat "#include" and other)

    so :

    struct a
    {
       int i;
    };
    
    struct b
    {
       struct a;
       int i;
       int j;
    };
    

    struct b is expended as something like this :

    struct b
    {
        struct a
        {
            int i;
        };
        int i;
        int j;
    }
    

    and so, at compile time it evolve on stack as something like: b: int ai int i int j

    that also why it's dificult to have selfreferent structs, C preprocessor round in a déclaration loop that can't terminate.

    typedef are type specifier, that means only C compiler process it and it can do like he want for optimise assembler code implementation. It also dont expend member of type par stupidly like préprocessor do with structs but use more complex reference construction algorithm, so construction like :

    typedef struct a A; //anticipated declaration for member declaration
    
    typedef struct a //Implemented declaration
    {
        A* b; // member declaration
    }A;
    

    is permited and fully functional. This implementation give also access to compilator type conversion and remove some bugging effects when execution thread leave the application field of initialisation functions.

    This mean that in C typedefs are more near as C++ class than lonely structs.

提交回复
热议问题