Confused by #define and typedef

后端 未结 4 2104
鱼传尺愫
鱼传尺愫 2021-01-07 01:27
#define T Stack_T
typedef struct T *T;

Then what does T in struct T mean,the one defined by #define or

相关标签:
4条回答
  • 2021-01-07 01:28

    The T represents Stack_T so, you can read the typedef as:

    typdef struct Stack_T *Stack_T;
    

    so every T in your code is replaced as Stack_T during compiler compilation.

    0 讨论(0)
  • 2021-01-07 01:29

    #define directives are substituted early on in the compilation process (translation phase 4, compilation doesn't actually occur until phase 7, these phases and what happens during them are detailed in the standard, section 5.1.1.2).

    That #define will simply change T pre-processing tokens into Stack_T.

    The effect of that on the typedef will be to turn it into:

    typedef struct Stack_T *Stack_T;
    

    Following that, Stack_T is defined as a type, a pointer to another type of struct Stack_T. The Stack_T and struct Stack_T are two separate things.

    0 讨论(0)
  • 2021-01-07 01:42

    Since #define is processed in pre-compilation and struct in compilation, after the pre-compilation you'll have typedef struct T *T; looks like that: typedef struct Stack_T *Stack_T;

    0 讨论(0)
  • 2021-01-07 01:47

    The preprocessor does only do text-substitutions, so that code would look like

    typedef struct Stack_T *Stack_T;
    

    So every T in your code is first replaced to Stack_T, and after that your compiler kicks in, sees the typedef and uses struct Stack_T*.

    It might be good to know that struct Type and Type are only the same in C++, not in C.

    0 讨论(0)
提交回复
热议问题