gcc对C语言的扩展:函数参数构造
2013-06-25 15:32
253 查看
gcc对C语言的扩展:函数参数构造
在不知道一个函数所接收到的参数的个数或类型的情况下,我们可以用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函数的返回值。
例子:
在不知道一个函数所接收到的参数的个数或类型的情况下,我们可以用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函数的返回值。
例子:
#include<stdio.h> int passthrough(); int average(); int main(int argc,char *argv[]) { int result; result=passthrough(1,7,10); printf("result=%d\n",result); return 0; } int passthrough(int a,int b,int c) { void *record; void *playback; void (*fn)()=(void (*)())average; record=__builtin_apply_args(); playback=__builtin_apply(fn,record,128); __builtin_return(playback); } int average(int a,int b,int c) { return ((a+b+c)/3); }运行结果:
相关文章推荐
- GCC下,C语言参数的内存分配 以及 函数可变参数
- 深入了解C语言(函数的参数传递和函数使用参数的方法)
- C语言中函数参数的入栈顺序
- C语言深入浅出可变参数函数的使用技巧(转)
- C语言之数组专题:数组指针、指针数组、数组做函数参数退化、数组名、数组类型
- GCC 对C语言的扩展
- linux中c语言的扩展库函数之文件操作
- C语言可变参数函数实现
- 根据用户传入的参数调用用户函数的php扩展
- c语言实现函数可变参数
- 关于C语言中函数调用和参数传递机制的探讨(一 .无参数传递)
- C语言可变参数函数
- c语言qsort()函数中compare()函数参数写法
- C语言二级指针做函数参数改变该指针的指向
- 【C语言】实现文件拷贝功能(文件,主函数参数)
- C语言可变长参数函数与默认参数提升
- C语言中数组作为函数参数的问题
- 基础快速过 之C语言 三:函数之快速运用~~[函数的用法,参数概念,自己写的函数,变量和常量的用法]
- 【C语言】主函数的参数
- C语言 指针变量作为函数参数详解