函数原型中缺少标识符

时间:2017-11-09 08:12:12

标签: c struct

我正在阅读关于在Unix中通过C完成的套接字编程,这个函数对我来说特别有趣,因为它使用的语法 - :

int  pr_usrreq(struct socket *so , int req, struct mbuf  *m0 , *m1 , *m2);

以上示例取自此link

有趣的是,这种有效的C语法是怎样的?

struct mbuf *m0 , *m1 , *m2*m1 *m2之后是否应该有标识符?

或者这仅仅是一种表示它的错误方式?

2 个答案:

答案 0 :(得分:4)

从文字here看来:

int pr_usrreq(struct socket *so, int req, struct mbuf *m0 , *m1 , *m2);

实际应该是:

int pr_usrreq(struct socket *so, int req, struct mbuf *m0, struct mbuf* m1, struct mbuf *m2);

这只是一个错字。

答案 1 :(得分:4)

这看起来像是ANSI原型和K& R功能头之间仍然存在的混合体。该链接表示m0m1m2应为struct mbuf*类型。这需要明确写成:

int pr_usrreq(struct socket *so , int req, struct mbuf *m0 , struct mbuf *m1 , struct mbuf *m2);

您提供的表格绝对不正确。

在K& R风格*中(根据定义,无原型)声明将是

int pr_usrreq(); 

,函数定义将以

开头
int pr_usrreq(so, req, m0, m1, m2) 
  struct socket *so; 
  int req;
  struct mbuf *m0, *m1, *m2; {

看起来有人得到了错误的"原型"通过错误地从旧表单转换。

<子> * K&amp; R样式在当前C中已弃用,并且不受任何版本的C ++支持。