有人可以解释一下代码的确切含义吗?像这样进行typedef并在函数调用参数中使用“名称”是否有效?
typedef uint8 (*Funcptr) (name);
typedef uint8 (*Funcptr1) (name);
typedef struct {
Funcptr func;
Funcptr1 func_1;
} a;
答案 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)
是的,只要uint8
和name
是先前定义的类型,就是有效的。
声明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
。