免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1257 | 回复: 3
打印 上一主题 下一主题

《UNIX网络编程》上的代码格式为何这么写?大家帮我看下,先谢了! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-21 16:50 |只看该作者 |倒序浏览
void
pr_pack(buf, cc, from)
               char *buf;
               int cc;
        struct sockaddr_in *from;

{
        register struct icmp *icp;
        register u_long l;
        register int i, j;
        register u_char *cp,*dp;
        static int old_rrlen;
        static char old_rr[MAX_IPOPTLEN];
        struct ip *ip;
        struct timeval tv, *tp;
        double triptime;
        int hlen, dupflag;

        (void)gettimeofday(&tv, NULL);

                 //其余略
}//end of code

这是《UNIX网络编程》(第三版)上的源代码,为何函数的声明要这样写:
void
pr_pack(buf, cc, from)
               char *buf;
               int cc;
        struct sockaddr_in *from;

{//code of function}
和下面这样写有什么差别呢:
void
pr_pack(char *buf, int  cc, struct sockaddr_in *from)
{//code of function}

当时奇怪的是上面第一种写法编译不通。还有,其中的一句:
(void)gettimeofday(&tv, NULL);
这句为何前面有加了个(void)?

谢谢!

论坛徽章:
0
2 [报告]
发表于 2006-05-21 17:46 |只看该作者
你讲的这种情况是在函数定义里对形参的声明,而非函数的声明。
第一种是传统方式,现在的编译环境不一定支持了。
第二种是我们现在常用的现代方式。

论坛徽章:
0
3 [报告]
发表于 2006-05-21 17:53 |只看该作者
gettimeofday本身定义了int型的返回值用以控制差错。
如果不需要(void)的了也无妨的。

论坛徽章:
0
4 [报告]
发表于 2006-05-21 18:18 |只看该作者

回复 3楼 elila 的帖子

呵呵,现在明白啦,谢了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP