我正在阅读关于在Unix中通过C完成的套接字编程,这个函数对我来说特别有趣,因为它使用的语法 - :
int pr_usrreq(struct socket *so , int req, struct mbuf *m0 , *m1 , *m2);
以上示例取自此link。
有趣的是,这种有效的C语法是怎样的?
struct mbuf *m0 , *m1 , *m2
和*m1
*m2
之后是否应该有标识符?
或者这仅仅是一种表示它的错误方式?
答案 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功能头之间仍然存在的混合体。该链接表示m0
,m1
和m2
应为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 ++支持。 子>