两个不同的函数指针的typedef是否有效?

时间:2019-01-30 14:31:28

标签: c

有人可以解释一下代码的确切含​​义吗?像这样进行typedef并在函数调用参数中使用“名称”是否有效?

typedef uint8 (*Funcptr) (name);
typedef uint8 (*Funcptr1) (name);

typedef struct {
    Funcptr func;
    Funcptr1 func_1;
} a;

2 个答案:

答案 0 :(得分:0)

有指向函数的指针,该函数返回 uint8 并在参数中获取 name (可能是其他typedef,如果未定义则无效)

示例:

typedef char * name; /* added to be able to compile */

typedef uint8 (*Funcptr) (name);

uint8 foo(name s)
{
  return 0;
}

int main()
{
  Funcptr f = &foo;
  char bar[] = "bar";

  (*f)(bar);
}

答案 1 :(得分:0)

是的,只要uint8name是先前定义的类型,就是有效的。

声明typedef uint8 (*Funcptr) (name);Funcptr是指向以name作为参数并返回uint8的函数的指针的类型。

通常,诸如uint8 (*Funcptr) (name)之类的C声明给出一个类型(在这种情况下为uint8)和一个示例表达式(在这种情况下为(*Funcptr) (name)),意思是“当我使用{ {1}}这样,表达式的类型为Funcptr。所以我们有:

  • uint8(*Funcptr) (name)
  • 因此,uint8必须是接受(*Funcptr)并返回name的函数。
  • 因此,uint8必须是指向接受Funcptr并返回name的函数的指针。

然后,由于它是uint8,所以我们知道typedef是这种类型的名称,而不是作为指向使用Funcptr的函数的指针的对象。返回name