2016 - 2024

感恩一路有你

c语言可变参数传递 如何在C语言中实现可变长度的参数?

浏览量:1272 时间:2021-03-13 14:41:38 作者:admin

如何在C语言中实现可变长度的参数?

举一下可变模板参数的例子吧(C 11及以上):

可以获得一堆 int 类型的参数中最小的一个(如果传了奇怪的参数会报错),其他类型同理。如果不用C 11的话可能没有更好的方法。

c语言传递变长参数?

二维数组做函数参数时,形参的语法形式是:类型说明符 形参名[ ][常量表达式M]形参数组可以省略一维的长度。由于实参代表了数组名,是"地址传递",二维数组在内存中是按行存储的。在形参中,就必须指明列的个数,才能保证实参数组与形参数组中的数据一一对应,所以,形参数组中第二维的长度是不能省略的。调用函数时,与形参数组相对应的实参数组必须也是一个二维数组,而且它的第二维的长度与形参数组的第二维的长度必须相等。函数sum2d(int rows, int cols, int ar[rows][cols]) 的第三个参数数组ar的第二维必须给一个常数。

C语言中可变参数的用法?

C语言可变参数的定义采用3个点(...)表示。

比如:

void printf(const char* fmt, ...)

通过以下方法进行提取参数:

va_start

va_arg

va_end

既然C语言函数的局部变量会被释放,那为什么函数还可以把它return返回呢?

看了底下兄弟的答复,只能说答对了一半。

真正的原因在于ABI(应用程序二进制接口)。

ABI定义了与系统交互的细节:如数据类型、大小和对齐;调用约定(控制函数的参数的传递方向、可变长度处理、堆栈清理主体以及如何接受返回值等);系统调用的编码和一个应用如何向操作系统进行系统调用;以及在一个完整的操作系统ABI中,目标文件的二进制格式、程序库等等。一个完整的ABI,像Intel二进制兼容标准 (iBCS),允许支持它的操作系统上的程序不经修改在其他支持此ABI的操作体统上运行。

其他的 ABI 标准化细节还包括 C 名称修饰 ,和同一个平台上的编译器之间的调用约定,但是不包括跨平台的兼容性。

至于底下兄弟所说的EAX保存返回值,这个只是X86的ABI规范,在PowerPC等其他CPU架构平台,实现是不一样的!——PowerPC下,返回值是保存在R3寄存器中的

c语言可变参数传递 c可变参数列表使用 c可变参数宏

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。