理解C中函数的typedef

时间:2012-08-09 17:20:09

标签: c typedef

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

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未被声明为指针。任何人都可以解释这里发生了什么?

2 个答案:

答案 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 *)的函数的指针