0

我遇到了以下函数声明,但我无法理解它是如何工作的:该函数在文件中声明如下:

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 没有声明为指针。谁能解释这里发生了什么?

4

2 回答 2

1

function1 被声明为不返回任何内容并将指向 int 的指针和指向 newtype 的指针作为参数的函数的类型。

这种方式有助于确保获得符合特定格式的函数,尤其是在使用回调函数/函数指针时。

于 2012-08-09T17:26:02.093 回答
0
 typedef void function1 (int* a, newtype* p);

将名称function1void ()(int *, newtype *)定义为类型即函数的别名。

因此function1 function2;与此原型相同:

void function2 (int* a, newtype* p);

该名称function1还可以用于声明一个指针,从而产生一个熟悉的“函数指针”。这就是function3在声明时所做的事情int function3 (int, char, function1* );——它的最后一个参数是一个指向带有签名的函数的指针void ()(int *, newtype *)

于 2012-08-09T17:33:44.350 回答