【问题标题】:What does the following c code means?下面的c代码是什么意思?
【发布时间】:2013-01-30 12:41:40
【问题描述】:
typedef int (*http_data_cb) (http_parser*, const char *at, size_t length);

据我所知,typedef 为标准库中的类型分配新名称。在这种情况下,*http_data_cb 的实例是一个 int,但 (http_parser*, const char *at, size_t length) 怎么样?

这里是whole code的链接

谢谢,

【问题讨论】:

  • @KingsIndian 它无法识别,它说语法错误
  • 因为http_parser 没有定义。可能也是一个类型定义的类型。
  • @wildplasser,与此无关。我尝试通过更改它。如果你不相信我自己试试。
  • 我不必尝试。我知道 http_parser 在 C 中既不是类型名称也不是关键字。我刚刚检查过:它是一个类型化的不完整类型。
  • 我将 http_parser 更改为 int 然后尝试了。

标签: c function-pointers typedef


【解决方案1】:

这是一种将类型定义为函数指针的方法。通常在这样的 typedef 中,您不会命名函数的参数,而仅指示它们的类型。

因此,http_data_cb 类型的变量将是一个指向函数的指针,该函数返回 int 结果,并按此顺序获取 http_parser*const charsize_t 类型的三个参数。

【讨论】:

  • 我不会说您通常不会为参数命名,因为出于文档原因,为参数命名通常很有价值。当然,它们是可选的,但我认为强烈推荐。
  • http_data_cb(InstanceOfParser, string_ptr, string_len); 会返回一个整数,对吧?
  • @virtuecan 实际上你做了一些http_data_cb f=<some_func_name>;(*f)(InstanceOfParser, string_ptr, string_len);
【解决方案2】:

它声明了一个函数指针类型。

类型别名http_data_cb 是一个指向函数的指针,该函数接收三个参数并返回一个整数。

您可以使用它来获得指向其他函数的指针,例如在事件驱动系统中作为回调传递。

有关阅读和理解声明的更多帮助,请参阅例如the clockwise/spiral rule.

【讨论】:

  • http_data_cb(InstanceOfParser, string_ptr, string_len); 会返回一个int,对吧?
  • @virtuecan 是的,如果你声明了一个http_data_cb 类型的变量并使它指向一个具有正确签名的函数,那么你可以使用你的变量(不是类型)作为一个函数并且它应该返回一个整数。
  • 感谢您的帮助,如果我有足够的声誉,会投票赞成您的评论:(
【解决方案3】:

http_data_cb:是一个变量

(*http_data_cb):是指针变量

(*http_data_cb)(...):是指向函数的指针变量

(*http_data_cb)(http_parser*, const char *at, size_t length):是一个指针变量,指向接收(http_parser*, const char *at, size_t length)的函数 p>

int (*http_data_cb)(http_parser*, const char *at, size_t length):是一个指针变量,指向接收 (http_parser*, const char *at, size_t length) 和返回一个整数。

typedef int (*http_data_cb)(http_parser*, const char *at, size_t length): http_data_cb 被声明为一个新的数据类型别名,作为指向接收 (http_parser* , const char *at, size_t length) 并返回一个 int。

【讨论】:

  • @virtuecan 你可能想检查一下:stackoverflow.com/questions/1448849/… 我实际上是从那里学到的 :)
  • 或者更确切地说,int (*http_data_cb)(...),指定了返回类型,是一个函数指针。
  • 感谢 Noor,感谢 :)
猜你喜欢
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 2017-06-03
  • 1970-01-01
  • 2017-10-04
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
相关资源
最近更新 更多