LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 828|回复: 4

DEFUN宏的疑问

[复制链接]
发表于 2004-11-13 17:19:51 | 显示全部楼层 |阅读模式
libc库提供的memcpy函数是:

  1. void *memcpy(void *dest, const void *src,size_t n);
复制代码

但是在libc库的源码中它的定义确实这样的形式

  1. PTR
  2. DEFUN(memcpy, (dstpp, srcpp, len),
  3.       PTR dstpp AND CONST PTR srcpp AND size_t len)
复制代码

其中几个宏的定义如下:

  1. #define PTR void *
  2. #define DEFUN(name,arglist,args)        name(args)
  3. #define AND        ,
复制代码

看的出来,这个宏展开以后和提供的函数原型是一样的,但我不明白的一点是为什么要定义成DEFUN这样的宏呀。
发表于 2004-11-14 00:14:21 | 显示全部楼层
好象,就是为了方便广大人民群众使用
DEFUN   ==  define a function
name    ==  the  fuction name
arglist ==  the arguments of the function
arg     ==  declaration of the arguments

我们可以学西一下这种风格!当然是个人爱好

注:以上是个人主观猜测!
发表于 2004-11-14 11:53:27 | 显示全部楼层
这样做不是为了什么个人爱好,而是为了保持与旧的函数原型声明的兼容性。某些编译器不支持新的函数原型声明的。
 楼主| 发表于 2004-11-16 23:51:09 | 显示全部楼层
在经过预处理后,编译器面对的代码是一样的呀?没看出来是如何保持兼容性的,能再解释一下吗?
发表于 2004-11-17 13:44:10 | 显示全部楼层
呵呵,这涉及到 ANSI C 和 K&R C 的区别。详细情况请看看这个:
http://download.linuxsir.cn/f33k ... ng_Deep_Secrets.pdf
好像是某一章。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表