阅 读 文 章

gcc对C语言的扩展:构造函数调用(Constructing Function Calls)

[来源:网上转载 (http://www.chinaunix.net) | 作者:网友(不详) | 时间:2007-07-07 | 浏览:人次 ]

在不知道一个函数所接收到的参数的个数或类型的情况下,我们可以用GCC有一套内建函数记录下参数并将他们用于调用其他的函数。

你也能够在不知道一个函数的返回类型的情况下获得函数调用的返回结果,然后再返回这个结果(只要调用你所在函数的调用者能接收这个返回值的数据类型)。

Built-in Function: void * __builtin_apply_args ()
这个内建函数返回一个指向某些数据的指针,这数据描述了如何用传给当前函数的参数来执行一个函数调用。 这个函数会在栈中某个内存地址保存参数指针寄存器,struct结构地址和其他一些可能用于传递参数的寄存器的值, 然后这个函数返回这块内存的地址。  

Built-in Function: void * __builtin_apply (void (*function)(), void *arguments, size_t size)
这个内建函数将用保存下来的参数的拷贝来调用function函数, 参数由arguments指针指向的地址和size表示的大小来表示。arguments指向的内容应该是__builtin_apply_args函数返回的地址,参数的尺寸size指定了栈数据的大小,用字节作为单位。这个函数返回一个指针,它指向function函数返回值的数据。返回值被保存在栈中分配的一段内存地址中。  

计算出合理的size的值并不总是件容易的事情。size值被__builtin_apply函数用于计算argument指针指向内存去中被压入栈中的数据量的大小。

Built-in Function: void __builtin_return (void *result)
这个内建函数返回result所描述的返回值。result应该为__builtin_apply函数的返回值。

这里使用的几个函数都是以下划线打头的。 使用以下划线开头的名字来表示局部变量是为了避免与在表达式中取代a和b之类名字(如宏)的变量名冲突。最终我们期望设计一种新的声明语法形式--它允许我们声明那些作用域在其初始化后才开始的变量; 这是一种避免冲突的更为可靠的方法。
论坛热门帖子: [lch203] 写得蛮好的linux学习笔记(10-21)
[黑马制造] 学习java的30个目标(10-19)
[笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19)
[udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18)
[沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18)
TAG标签: 调用 函数 语言 扩展 构造 返回 这个 参数 地址 void

最新评论 共有0位网友发表了评论

发表评论

评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名:(注册)
密码:
验证码:
匿名发表

网站地图友情连接交流论坛网站投稿广告服务联系我们留言本站长统计
Some rights reserved: www.chmhome.com, 鄂ICP备07010232号 E-mail:chinakafei@live.com,QQ:552766
中国咖啡技术网(Chmhome):国外编程技术书籍,中文编程手册,经典编程文章,交流技术,技术软件下载,计算机论文,毕业论文.