【问题标题】:understanding typedefs for functions in C理解 C 中函数的 typedef
【发布时间】:2012-08-10 02:39:46
【问题描述】:

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

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 */
}

我无法理解以下陈述: 功能1功能2; typedef void function1 (arguments) 是什么意思,因为 function1 没有声明为指针。谁能解释这里发生了什么?

【问题讨论】:

标签: c typedef


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:
     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 *) 的函数的指针

    【讨论】:

      猜你喜欢
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多