我遇到了以下函数声明,但我无法理解它是如何工作的: 该函数在文件中声明如下:
struct newtype {
/* some definition */
};
typedef void function1 (int* a, newtype* p);
然后在上面的另一个C代码声明用于声明另一个function2,如下所示:
function1 function2;
void function2(int* a, newtype* p)
{
/* function definition */
}
然后使用function2如下:
int function3 (int, char, function1* );
/* definition */
function3(int a, char c, function2 )
{
/* function definition */
}
我无法理解声明: function1 function2; 什么typedef void function1(arguments)意味着function1未被声明为指针。任何人都可以解释这里发生了什么?
答案 0 :(得分:1)
function1被声明为一个类型,用于函数不返回任何内容,并将指向int的指针和指向newtype的指针作为参数。
这种方式对于确保获得符合特定格式的函数非常有用,尤其是在使用回调函数/函数指针时。
答案 1 :(得分:0)
typedef void function1 (int* a, newtype* p);
将名称 function1 定义为类型void ()(int *, newtype *)
的别名,即函数。
因此function1 function2;
与此原型相同:
void function2 (int* a, newtype* p);
名称function1
也可用于声明指针,这会产生熟悉的“函数指针”。这就是function3在声明int function3 (int, char, function1* );
时正在做的事情 - 它的最后一个参数是指向具有签名void ()(int *, newtype *)
的函数的指针