c++ - 如何直接修改va_list结构成员?

标签 c++ variadic-functions

如介绍hereva_list类型实现如下

typedef struct {
   unsigned int gp_offset;
   unsigned int fp_offset;
   void *overflow_arg_area;
   void *reg_save_area;
} va_list[1];

我可以直接修改va_list变量的结构成员吗?

va_list ap; 
ap[0].gp_offset = 123;   // I want something like this
ap->gp_offset = 123;     // but none of these compile

当我尝试运行它时,我分别得到了这些错误

错误:请求'ap[0]'中的成员'gp_offset',它是非类类型'__va_list_tag'

错误:请求'*(__va_list_tag*)(& ap)'中的成员'gp_offset',它是非类类型'__va_list_tag'

我为什么要问?我正在处理一个大型数据库,我看到了一种修改 va_list 变量的方法,如下所示。我想知道这是否可以在没有所有这些麻烦的情况下完成。

va_list ap;
// Mimic GCC data structure
typedef struct {
   unsigned int gp_offset;
   unsigned int fp_offset;
   void *overflow_arg_area;
   void *reg_save_area;
}va_list2[1];

char* ap2 = (char*)≈         // same address as ap
va_list2* ap3 = (va_list2*)ap2; // same address as ap
(*a3)->gp_offset = 123;         // Now this is allowed!

最佳答案

该答案是针对 C 题的,但即使是该答案在技术上也是不正确的。

什么是 va_list,在两种语言中都没有定义。您可能能够做一些特定于编译器/库/ABI 的事情,但我的建议是找到另一种方法来做您想做的任何事情。

关于c++ - 如何直接修改va_list结构成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41021997/

相关文章:

c++ - 我正在尝试将 int 转换为 char 并输出 ascii 值?

c++ - C++中调用虚函数的时间复杂度

c++ - 传递堆栈对象的所有权而不重复

C++ va_list 函数重载

julia - Varargs 在 Julia 中给出了关键错误

java - 我可以将数组作为参数传递给 Java 中具有可变参数的方法吗?

c++ - 如何使用 Code::Blocks 链接到库?

c++ - 是否有 WinAPI 函数 'ExistFile' ?

java - 如何连接字符串的变量参数

c - 在 C 中不使用 va_list 访问可变参数函数的参数