Old style of C function syntax

今天编译 unpv13e (Unix 网络编程卷 1 )示例代码中 libfree/inet_ntop.c 文件,编译器报下面代码的报错,具体是说 size 类型不匹配,然后把 size_t 改成 socklen_t 就可以编译过去了。

const char *
inet_ntop(af, src, dst, size)
	int af;
	const void *src;
	char *dst;
	size_t size;
{
	switch (af) {
	case AF_INET:
		return (inet_ntop4(src, dst, size));
	case AF_INET6:
		return (inet_ntop6(src, dst, size));
	default:
		errno = EAFNOSUPPORT;
		return (NULL);
	}
	/* NOTREACHED */
}

看这个怪怪的函数定义语法,好陌生,但是确可以编译过去。然后想是不是老式的语法。就去搜索了一下。还真有其他网友提疑问。我特别按照这种定义语法写了测试代码,还真是这样。

于是,我又去查阅一下 K&R C 的书籍( C 语言程序设计第二版),在 1.7 Functions 小节找到如下说明。果真是历史遗留的语法,只是编译器现在还支持。

A note of history: the biggest change between ANSI C and earlier versions is how functions are declared and defined. In the original definition of C, the power function would have been written like this:

/* power: raise base to n-th power; n >= 0 */
/* (old-style version) */
power(base, n)
int base, n;
{
	int i, p;
	p = 1;
	for (i = 1; i <= n; ++i)
	p = p * base;
	return p;
}

然后书中建议不要使用这种古老的语法,而是使用新的语法(就是我们常用的语法)。猜测现在的编译器还要兼容几十年前的语法,应该还有很多几十年前的代码现在依旧在被使用吧。

转载于:https://my.oschina.net/iirecord/blog/1342524

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值