CC++中多参数函数的参数计算顺序与压栈顺序是怎样的?

2026-04-19 00:081阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计894个文字,预计阅读时间需要4分钟。

C/C++中多参数函数的参数计算顺序与压栈顺序是怎样的?

一、前言今天在看《Thinking in C++》这本书时,其中一个例子引起了我的注意。整体是使用了下面的这句+单看这条语句的语义会发现,仅是使用了一个简单的string的substr函数将所得子串push_back到另一个string中。

一、前言

今天在看Thinking in C++这本书时,书中的一个例子引起了我的注意,具体是使用了下面这句

单看这条语句的语义会发现仅仅是使用一个简单的string的substr函数将所得子串push_back到strings。但是在阅读时我却对于substr的参数传递产生了疑惑,到底是先执行了++current,还是先执行了last-current?

经过查阅资料,发现了两个相关知识点----参数的计算顺序与压栈顺序。

二、参数压栈顺序

C/C++中规定了函数参数的压栈顺序是从右至左,对于含有不定参数的printf函数,其原型是printf(const char* format,…);其中format确定了printf的参数(通过format的%个数判断)。假设是从左至右压栈,那么先入栈的是format(这里我们简化理解为参数个数),然后依次入栈未知参数,此时想要知道参数个数,就必须找到format,而要找到format,就必须知道参数个数,陷入一个逻辑矛盾。因此C/C++中规定参数压栈为从右至左,这样对于不定参数,最后入栈的是参数个数,只需要取栈顶就可以得到。

阅读全文

本文共计894个文字,预计阅读时间需要4分钟。

C/C++中多参数函数的参数计算顺序与压栈顺序是怎样的?

一、前言今天在看《Thinking in C++》这本书时,其中一个例子引起了我的注意。整体是使用了下面的这句+单看这条语句的语义会发现,仅是使用了一个简单的string的substr函数将所得子串push_back到另一个string中。

一、前言

今天在看Thinking in C++这本书时,书中的一个例子引起了我的注意,具体是使用了下面这句

单看这条语句的语义会发现仅仅是使用一个简单的string的substr函数将所得子串push_back到strings。但是在阅读时我却对于substr的参数传递产生了疑惑,到底是先执行了++current,还是先执行了last-current?

经过查阅资料,发现了两个相关知识点----参数的计算顺序与压栈顺序。

二、参数压栈顺序

C/C++中规定了函数参数的压栈顺序是从右至左,对于含有不定参数的printf函数,其原型是printf(const char* format,…);其中format确定了printf的参数(通过format的%个数判断)。假设是从左至右压栈,那么先入栈的是format(这里我们简化理解为参数个数),然后依次入栈未知参数,此时想要知道参数个数,就必须找到format,而要找到format,就必须知道参数个数,陷入一个逻辑矛盾。因此C/C++中规定参数压栈为从右至左,这样对于不定参数,最后入栈的是参数个数,只需要取栈顶就可以得到。

阅读全文