美文网首页
可变参数原理

可变参数原理

作者: 今天不想掉头发 | 来源:发表于2019-07-20 15:31 被阅读0次

    函数占用的是静态内存,因此需要提前告诉编译器占用内存大小,即调用时需要分配的栈空间,编译器主要是通过函数声明中描述的函数参数的个数以及类型,来计算参数所占用的栈空间。

    既然是这样,那动态参数又是怎么实现的呢?C调用约定规定:由调用者把参数以从右向左的顺序压入栈中,并且由调用者清理堆栈中的参数,比如printf(char* format, arg1, arg2, ....),既然是调用者压入的参数,调用者知道栈中压入的参数情况,因此传入参数个数编译器在编译阶段就能确定下来。

    image.png

    栈中的参数个数其实都是在格式化字符串中,格式化字符串中有多少个'%',那么就在栈中找多少次参数。

    在gcc的头文件stdarg.h中定义了与函数的可变参数相关的3个宏va_start、va_end、va_arg,

    相关文章

      网友评论

          本文标题:可变参数原理

          本文链接:https://www.haomeiwen.com/subject/ngbylctx.html