va_start() 修改堆栈
va_start() modifies stack
据说调用va_start()
后必须调用va_end()
va_start()
因为(总是?)会干扰堆栈。
谁能解释一下调用va_start()
如何修改堆栈以及这种修改如何帮助获取可变参数。
它可能会修改堆栈。它可以做任何事情,也可以什么都不做。你不知道。无论它可能做什么或不做什么,都会被va_end()
撤消。这就是为什么你必须称呼它。它的实际功能(如果有的话)取决于编译器和处理器体系结构。没有一个单一的答案。
是的
,每次调用va_start
都必须匹配一个va_end
。我认为没有必要知道实现细节。
C11 §7.16.1 变量参数列表访问宏
本子句中描述的
va_start
和va_arg
宏应作为宏而不是函数实现。未指定va_copy
和va_end
是使用外部链接声明的宏还是标识符。如果取消宏定义是为了 访问实际函数,或程序定义具有相同名称的外部标识符, 行为未定义。每次调用va_start
宏和va_copy
宏时,应与同一函数中对va_end
宏的相应调用相匹配。
C++也是如此。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 独立读取-修改-写入顺序
- 当系统的卷被修改时,如何修改WASAPI环回捕获卷
- 修改函数中的指针(将另一个指针作为参数传递)
- 为什么我可以通过引用修改常量返回
- 对于结构,表达式必须是可修改的ivalue
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 算法问题:查找从堆栈中弹出的所有序列
- 为什么不能修改对象中的值?另外,我如何改进此链表?
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- Linux x64堆栈在信号处理程序内部展开,以修改返回地址
- 尝试修改 Hbitmap 数据时出现堆栈错误
- 我如何修改我的C 程序以显示用户输入的单词,并使用堆栈向后
- 修改调用堆栈
- 需要修改堆栈/链表程序以确定单词是否为回文
- va_start() 修改堆栈
- 高效查找应用了数据修改堆栈的缓冲区
- 堆栈溢出错误 c++.我如何修改/修复此代码以摆脱此问题
- 如何在函数修改堆栈时将堆栈传递给函数
- 修改Windows、TIB和异常上的堆栈