代码之家  ›  专栏  ›  技术社区  ›  anon

typedef是否由预处理器处理?[副本]

  •  3
  • anon  · 技术社区  · 11 年前

    是 typedef 由C的预处理器处理?

    也就是说 typedef int foo_t; 与…一样 #define foo_t int ?

    4 回复  |  直到 10 年前
        1
  •  3
  •   Barmar    5 年前

    不,因为这种类型的替换不适用于更复杂的类型。例如:

    typedef int tenInts[10];
    tenInts myIntArray;
    

    声明 myIntArray 相当于:

    int myIntArray[10];
    

    要将其作为宏来完成,必须使其成为函数样式,以便它可以在展开的中间插入变量名。

    #define tenInts(var) int var[10]
    

    并像这样使用:

    tenInts(myIntArray);
    

    这也不适用于声明多个变量。你必须写

    tenInts(myArray1);
    tenints(myArray2);
    

    你不会写

    tenInts myArray1, myArray2;
    

    就像你可以用 typedef .

        2
  •  1
  •   Yu Hao    11 年前

    不 .


    作为示例,

    typedef int *int_ptr1;
    #define int_ptr2  int *
    

    然后在:

    int_ptr1 a, b;
    int_ptr2 c, d;
    

    a 和 b 都是指向 int . c 也是指向 整数 但是 d 是一个 整数 .

        3
  •  0
  •   ameyCU    11 年前

    不 typedef (为C 关键字 )由编译器而不是预处理器解释,而 #define 由预处理器处理。

        4
  •  -1
  •   A B    10 年前

    否-C预处理器不处理typedef。C预处理器不识别C语言的语法;它将不知道什么是typedef,什么不是typedef。

    #define严格来说是“foo_t”的文本替换“int”;由预处理器完成的替换发生在编译之前。